Hibernate/EJB3 - kann nicht persistieren!!

  • Hallo,

    Ich versuche mit Hibernate/EJB3 2 neu erzeugten Objekte von der selben Klasse(Gene) zu persistieren. Diese 2 neue Objekte haben eine und dieselbe Liste von schon-persistierten Objekten einer anderen Klasse(CancerType) als Instanzvariablen. Die Beziehung ist 1-n, Gene hat mehrere CancerTpye. Wenn ich diese 2 neue Objekte persisteren will, kriege ich ein "Duplicate entry" Fehler.

    Kann jemand aus den folgenden Codes herausfinden, was falsch ist? Danke im voraus.

    Hibernate erzeugt für diese 2 Klassen mit der 1-n Beziehung 3 Tabellen. Gene, CancertType und Gene_CancerType.

    Die Tabelle CancerType wird schon am Anfang mit Daten gefüllt.

    Und die Main-Methode

    StackTrace:

  • Hallo,

    Du hast eine OneToMany Unidirectional Relationship modelliert.
    (erkennbar an der Jointable und am nichtvorhandenem Gegenpart @ManyToOny in der anderen Klasse)

    Ich vermute stark, daß Du tatsächlich eine OneToMany Bidrectional Relationship benötigst !!!?

    @OneToMany(mappedBy="xyzmappedProperty")
    und @ManyToOne in der anderen Klasse.

    Da müßten dann "normal" 2 Tables erzeugt werden, eine mit Objectid-Fremdschlüssel ...
    Am besten vor dieser Änderung alle Tables droppen .. soferne ohnehin nicht per persistnce.xml angegeben.

    ---------------------------

    CORRECTION:

    Ok, alles retour, "wirklichen" Fehler gefunden ...
    Viel zu kompliziert gedacht ;)

    Du verwendest eine 1:N Beziehung als N:M.

    Die Liste mit CancerTypes wird MEHRFACH gesetzt; damit das <=1-Constaint auf der 1-Seite verletzt.
    So wie es im Beispielcode benutzt wird, muß GENE<->Type N:M modelliert werden.
    Oder für jedes Gene die Types clonen, aber das ist IMHO schlechtes Design.

    mfg, lb


    Trading for a living [equities,futures,forex]

  • CORRECTION:

    Ok, alles retour, "wirklichen" Fehler gefunden ...
    Viel zu kompliziert gedacht ;)

    Du verwendest eine 1:N Beziehung als N:M.

    Die Liste mit CancerTypes wird MEHRFACH gesetzt; damit das <=1-Constaint auf der 1-Seite verletzt.
    So wie es im Beispielcode benutzt wird, muß GENE<->Type N:M modelliert werden.
    Oder für jedes Gene die Types clonen, aber das ist IMHO schlechtes Design.

    mfg, lb

    Danke, Danke und nochmal Danke.

    Ein ganz blöder Fehler von mir. Ich hatte mich gefragt und beantwortet so: Ein Gene hat mehrere Typen <--> d.h. OneToMany. Wie es von der anderen Seite sieht, habe ich darüber nie gedacht, weil ich eine Unidirectional-Relationship brauchte :hewa:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!