Hibernate OnetoMany, ManyToOne Mapping Geben null

9

Ich habe 2 Klassen namens PurchaseList.java und PurchaseListItems.java

Ich muss PurchaseList in PurchaseListItems zuordnen

PurchaseList.java

%Vor%

PurchaseListItems.java

%Vor%

Alles ist gut, aber ich bekomme null in pl_id. Bitte sag, wo ich falsch liege

    
sainath reddy 08.03.2013, 05:19
quelle

7 Antworten

5

Ihre Zuordnung definiert zwei unabhängige unidirektionale Beziehungen. Was Sie wollen, ist eine bidirektionale Beziehung. Der folgende Code wird die bidirektionale Beziehung

herstellen %Vor%

Das Attribut mappedBy ist erforderlich, da der Provider nicht automatisch feststellen kann, dass die angegebenen Beziehungen tatsächlich eine einzelne Beziehung bilden. Man könnte den Java-Typ des Instanzmitglieds verwenden, aber was ist, wenn mehrere Elemente desselben Typs vorhanden sind. Und es gibt viele Szenarien, in denen Sie zwei einzelne Beziehungen haben. Beispiel:

OneToMany: Benutzer - & gt; ForumThread (die Threads, die vom Benutzer erstellt wurden)

ManyToOne: ForumThread - & gt; Benutzer (der Benutzer, der den Thread geschlossen hat. Offensichtlich nicht unbedingt derjenige, der den Thread gestartet hat)

Dies sind zwei unabhängige Beziehungen und müssen als solche behandelt werden. Sie würden ziemlich überrascht sein, wenn Ihre Persistenz nur eine bidirektionale Beziehung daraus hervorbringen würde, nur weil die Typen und Multiplizität übereinstimmen.

Beachten Sie auch, dass bidirektionale Beziehungen nicht automatisch von einem JPA-Provider verwaltet werden, dh die inverse Seite wird nicht automatisch in Ihrem Objektmodell und somit nicht in der db aktualisiert / gesetzt. Das musst du selbst machen. By the way, in allen meinen Projekten bidirektionale Beziehungen waren ein Schmerz in den Arsch und ich denke, es ist ratsam, sie zu vermeiden.

    
bennidi 14.03.2013, 16:35
quelle
1

Aus irgendeinem Grund zugeordnet von mir funktioniert nicht mit postgres sql und Hibernate4

Unter dem Mapping funktioniert

PurchaseList.java

%Vor%

PurchaseListItems.java

%Vor%

Hinweis: Sie müssen die Identität verwenden oder explizit die Sequenz für ID-Spalten für Postgres erwähnen.

%Vor%     
Chandru 20.04.2015 16:29
quelle
0

Die jpa-Spezifikation sieht gut aus, aber überprüfen Sie, ob Sie der untergeordneten Beziehung in der Datenbank ein gültiges übergeordnetes Element zugewiesen haben. Wenn es keine Referenz gibt, gibt es null zurück.

    
MGPJ 08.03.2013 05:23
quelle
0

probiere das

aus %Vor%     
PSR 08.03.2013 05:26
quelle
0

Prüfen Sie, ob Sie purchaseListId mit einem gültigen Wert (eine erstellte PurchaseList -Instanz) gefüllt haben, wenn Sie ein erstellen PurchaseListItems Wert.

Es ist besser, mappedBy wie unten beschrieben zu verwenden, damit viele Seiten die Beziehung beibehalten können.

%Vor%     
Henry Leu 12.03.2013 12:14
quelle
0
%Vor%

Dies ist was ich vermisste, als ich ein Objekt erstelle.

Thnaks für deine Antworten

    
sainath reddy 13.03.2013 08:01
quelle
0
  1. Die @JoinColumn-Annotation gehört auf der @ManyToOne-Seite der Beziehung - aber nicht auf der @ OneToMany-Seite - entfernt sie von der @ OneToMany-Seite.

  2. Cascade wird verwendet, um DELETE / READ / UPDATE-Operationen zu kaskadieren, aber es füllt nicht automatisch die ID-Spalte auf der "untergeordneten" Seite eines Fremdschlüssels. Tatsächlich füllt es die Java-Verweise auf Objekte auf beiden Seiten der FK-Beziehung nicht auf. Sie müssen Beziehungsdaten auf beiden Seiten bidirektionaler Beziehungen manuell einrichten:

    myPurchaseListItem.setPurchaseList (myPurchaseList);
    myPurchaseList.setPurchaseListItem (myPurchaseListItem);

    Aus der JPA 2 Spezifikation:

    Bidirektionale Beziehungen zwischen verwalteten Entitäten werden basierend auf Referenzen beibehalten, die von der besitzenden Seite der Beziehung gehalten werden. Es liegt in der Verantwortung des Entwicklers, dass die auf der besitzenden Seite gehaltenen und die auf der inversen Seite gespeicherten Referenzen im Speicher bei jeder Änderung konsistent bleiben. Im Falle unidirektionaler Eins-zu-Eins und Eins-zu-Viele-Beziehungen ist es Aufgabe des Entwicklers, sicherzustellen, dass die Semantik der Beziehungen eingehalten wird. [29]

    Es ist besonders wichtig sicherzustellen, dass Änderungen an der inversen Seite einer Beziehung zu entsprechenden Aktualisierungen auf der besitzenden Seite führen, um sicherzustellen, dass die Änderungen nicht verloren gehen, wenn sie mit der Datenbank synchronisiert werden.

Glen Best 14.03.2013 05:46
quelle

Tags und Links