Unten ist eine 1: n-Beziehung von Department
zu Employee
angegeben.Eine verwaltete Entität auf der @ManyToOne-Seite zusammenführen
Department (Eltern):
@OneToMany(mappedBy = "department", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Employee> employeeList = new ArrayList<Employee>(0);
Angestellter (Kind):
@JoinColumn(name = "department_id", referencedColumnName = "department_id")
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Department department;
eine verwaltete Einheit Merging (Kind) wie folgt (unter Verwendung von CMT in EJB),
Employee employee = entityManager.find(Employee.class, 1L);
employee.setDepartment(department); // department is supplied by a client.
employee.setEmployeeName("xyz");
entityManager.merge(employee);
aktualisiert die entsprechende Mitarbeiterzeile in der Datenbanktabelle nicht. Es passiert nur, wenn CascadeType.MERGE
aus dem Kind @ManyToOne
Beziehung in Employee
entfernt wird.
Warum wird die Zeile in der Tabelle nicht aktualisiert? Was ist der einzige Zweck von CascadeType.MERGE
in Bezug auf dieses Beispiel?
Ich verwende derzeit EclipseLink 2.6.0 mit JPA 2.1.
Ich denke, es ist ein Fehler in EclipseLink. Haben Sie schon andere Versionen von EclipseLink oder Hibernate ausprobiert? Der Zweck von 'CascadeType.MERGE' in diesem Beispiel ist, wie gewöhnlich auch eine' CascadeType.MERGE' im Feld 'Abteilung' auszulösen. –
Das Entfernen dieser Zeile 'entityManager.merge (employee);' sollte die Zeile in der Datenbank aktualisieren, da es sich um eine verwaltete Entität handelt.Durch das Entfernen dieser Zeile wird jedoch die gesamte Liste der mit einer Abteilung verknüpften Mitarbeiter ("employee.setDepartment (department);") mehrmals neu eingefügt, es sei denn, "CascadeType.PERSIST" wird aus "@ ManyToOne" in "Employee" entfernt '. ** Das geht am Hibernate einwandfrei. ** Daher ist es ein Fehler in EclipseLink. – Tiny
Ich habe trotzdem ein Problem auf [Bugzilla] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=470697) erstellt. – Tiny