JPA: Merge @OneToMany Duplicate entry error

Ich bin alwways immer folgende Fehlermeldung:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2-1' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO ENTITY_ENTITY (relationships_ID, Entity_ID) VALUES (?, ?)
    bind => [1, 2]
Query: DataModifyQuery(sql="INSERT INTO ENTITY_ENTITY (relationships_ID, Entity_ID) VALUES (?, ?)")

Meine Klassen Aussehen:

@javax.persistence.Entity
public class Entity {


    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    protected Long id;

    @Column(nullable=false, updatable=false)
    protected String name;

    @OneToMany(cascade=CascadeType.MERGE)
    protected Collection<Entity> relationships = new ArrayList<Entity>();
}

Einer Instanz dieser Klasse verweisen können, andere Instanzen des gleichen Typs (selbst-Referenzierung).
Jetzt, während der Erstellung einer Instanz, die auf ein anderes, funktioniert alles einwandfrei.
Aber das problem ist, wenn solch ein (getrennt - ich bin mir nicht ganz sicher, da die Instanz bearbeitet über eine Facelets-form) - Instanz aktualisiert wird, D. H. den Namen, dann durch die Ausführung des EntityManager merge-Vorgang die Ausnahme - wie oben erwähnt - geworfen wird.

EDIT:

1. Erstellen Sie eine Instanz der Entität (z.B. E1).

2. Bestehen E1 über em.beibehalten werden(E1).

3. Später erstellen Sie eine weitere Instanz von Entity (E2), die refreneces E1 über die Eigenschaft Beziehungen.

4. Und bestehen E2: em.anhalten(E2).

--- Bis jetzt funktioniert alles einwandfrei.

  1. Laden zu durchsuchen, alle persistenten Entity-Instanzen und wählen Sie E2, das für die Bearbeitung (über ein Web-interface Passenden).
  2. Ändern d.h. der name der E2.
  3. Um die änderungen zu speichern: Rufen Sie em.merge(E2).

---Nun die Exception geworfen wird!

ENDE BEARBEITEN

Was ist falsch an meinem code?
Bitte, helfen Sie mir!!!

  • Können Sie zeigen einige (pseudo -) code für die ganze Strömung und fixieren Sie die Zuordnung (oder die Titel)?
InformationsquelleAutor gerry | 2010-08-25
Schreibe einen Kommentar