2016-07-17 7 views
1

Hallo, ich hoffe, dass Sie mich mit dieser Frage helfen:Merge und verzögertes Laden

Student 
... 
@ManyToOne 
Mentor 


Mentor 
... 
@OneToMany 
Student 

Gibt es einen Unterschied in auf einem Schüler verschmelzen zu verwenden, wenn:

Mentor faul ist: @ManyToOne (Fetch = FetchType.LAZY, kaskaden = CascadeType.MERGE))

Mentor ist bestrebt: @ManyToOne (fetch = FetchType.EAGER, kaskaden = CascadeType.MERGE))

+0

CascadeType.ALL sehr schlechte Idee zu entfernen. Lies meine Antwort. Möchten Sie den Mentor einer ganzen Klasse von Schülern löschen, nur weil ein Student zitiert hat? :) –

Antwort

1

Zuerst passiert nichts beim Zusammenführen, wenn Sie nicht kaskadieren. In Ihrem Beispiel haben Sie Cascade.Merge nicht angegeben, daher wird Ihre Zusammenführungsoperation nicht kaskadiert.

Nehmen wir an, Sie haben Kaskadierung. Wenn Ihre Entität nicht initialisiert wird, was passieren kann, wenn Ihre Beziehung Lazy ist, wird die Kaskadierung nicht über die nicht initialisierte Sammlung weitergegeben.

In Ihrem speziellen Fall nach der JPA-Spezifikation ist das Standardverhalten von ManyToOne EAGER.

Falls es EAGER die Einheit überprüft werden, wenn sie verschmutzt ist, falls es schmutzig wird die Zusammenführung weiter

Eine weitere Sache kaskadiert werden. CascadeType.ALL auf ManyToOne ist eine schlechte Idee. Wenn Sie eine Entität auf der MANY-Seite LÖSCHEN, löst dies ein Löschen des übergeordneten Objekts aus. Ich glaube, das willst du wirklich nicht. Ich empfehle Ihnen dringend, die CascadeType.All

+0

Es ist ein Beispielcode, also selbst mit cascade.merge wird die Zusammenführung nicht passieren, wenn die Entität oder Sammlung faul initialisiert ist richtig? – GionJh

+1

Die ManyToOne-Seite ist standardmäßig EAGER, sofern sie nicht als Lazy markiert ist. –

+0

Ich markiert als LAZY: "Mentor ist faul: @ManyToOne (fetch = FetchType.LAZY, cascade = CascadeType.MERGE))" – GionJh

Verwandte Themen