2012-04-12 6 views
0

In der Entität Rechnung, habe ich eine Reihe von DetailInvoice mit Kaskade ALL Die parentId nicht auf das Kind Einheit automatisch durch Kaskaden

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "invoice") 
public Set<DetailInvoice> getDetailInvoices() { 
    return detailInvoices; 
} 

In der Einheit DetailInvoice

ist:

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "invoice_id") 
public Invoice getInvoice() { 
    return invoice; 
} 

Saving :

Invoice invoice = new Invoice(); 
    DetailInvoice detailInvoice = new DetailInvoice(); 
    invoice.getDetailInvoices().add(detailInvoice); 
    detailInvoice.setInvoice(invoice); // (1) Should we need this row? 
    session.save(invoice); 

Wenn wir in der Datenbank keine Zeile (1) haben, wird die detailInvoice haben InvoiceID null ist. Warum Hibernate setInvoiceId nicht auf detailInvoice basiert automatisch auf der Annotation Mapping?

Vielen Dank

Antwort

0

Bitte beachten Sie

Hibernate 4.1 Documentation Section 1.2.6

Die Person und Ereignisse Beispiel ist etwas ähnlich, was Sie reden.

Grüße,

Shardul.

+0

Vielen Dank für Ihre Antwort, aber ich denke, dass das Dokument nicht die Antwort für die Frage ist. Das ist nur die _inverse_, die _mapBy_ Deklaration ist. Die Frage bezieht sich auf Kaskade und geben Sie das Eltern für die Liste von Kind an. – phanhongphucit

+0

Ich meinte diesen Teil "Beachten Sie, dass Hibernate die normale Java-Semantik nicht beeinflusst. Wie haben wir im unidirektionalen Beispiel eine Verbindung zwischen einer Person und einem Ereignis erstellt? Sie fügen der Ereignissammlung eine Instanz von Event hinzu Verweise auf eine Instanz von Person. Wenn Sie diesen Link bidirektional erstellen möchten, müssen Sie auf der anderen Seite dasselbe tun, indem Sie der Sammlung in einem Ereignis eine Personenreferenz hinzufügen Seiten "ist unbedingt erforderlich mit bidirektionalen Links." Es sieht so aus, als ob Sie auf Abschnitt 1.2.5 verwiesen haben, siehe Abschnitt 1.2.6 –