JPA-Aktualisierung der Bidirektionalen Assoziation

Nehmen wir an, wir haben die folgenden Entitäten:

    @Entity
    public class Department {

        @OneToMany(mappedBy="department")
        private List<Employee> employees;
    }

    @Entity
    public class Employee {

        @ManyToOne
        private Department department
    }

Ist es verständlich auf ein update, das wir halten müssen, um beide Seiten der Beziehung wie folgt:

Employee emp = new Employee();
Department dep = new Department();
emp.setDepartment(dep);
dep.getEmployees().add(emp);

Alles gut bis jetzt. Die Frage ist, sollte ich mich bewerben merge-auf beiden Seiten, wie folgt, und ich vermeiden, dass die zweite Verschmelzung mit einer Kaskade?

entityManager.merge(emp);
entityManager.merge(dep);

Oder ist das Zusammenführen der besitzenden Seite genug? Auch sollten diese Zusammenführungen geschehen innerhalb einer Transaktion oder EJB? Oder tun es auf eine einfache controller-Methode mit getrennten Entitäten ist genug?

  • Wenn Sie die Interaktion mit der Datenbank haben, sollten Sie innerhalb einer Transaktion. Das ist wahr, unabhängig davon, ob Sie mit JPA oder nicht. Es spielt keine Rolle, ob eine Transaktion explizit oder implizit gestartet, durch einen Aufruf einer EJB; beide werden die Arbeit tun.
  • Was TomAnderson sagte, ist fast immer der Fall. Die Ausnahme ist, wenn Sie eine finden, und Sie finden mit einer Sperre andere als LockModeType.NONE.
InformationsquelleAutor ChrisGeo | 2013-11-19
Schreibe einen Kommentar