java – JPA更新双向关联

前端之家收集整理的这篇文章主要介绍了java – JPA更新双向关联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有以下实体:
@Entity
    public class Department {

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

    @Entity
    public class Employee {

        @ManyToOne
        private Department department
    }

在更新时可以理解,我们需要保持关系的双方如下:

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

一切都好,直到现在.问题是我应该如下应用合并,我避免了第二次合并一个级联?

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

还是把所有方面合并得足够?这些合并还会发生在事务或EJB内吗?或者用一个简单的控制器方法用独立的实体做足够的?

解决方法

The question is should I apply merge on both sides as follows,and an I avoid the second merge with a cascade?

您可以使用级联注释元素将操作的效果传播到关联实体.级联功能最常用于父子关系.

如果这些关系已经使用级联元素值cascade = MERGE或cascade = ALL注释注释,则将合并操作级联到由Department关系引用的实体.

管理实体之间的双向关系将根据关系所有者(员工)所持有的参考资料而持续存在.开发人员有责任保留内部存在的参考资料(Employee),而持有的内部参与者(Department)在变更时相互保持一致.所以,使用下面的一系列语句,这个关系将通过一个合并与数据库同步:

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

这些更改将在事务提交时传播到数据库.当事务通过使用EntityManager#flush方法处于活动状态时,实体的内存状态也可以在其他时间同步到数据库.

猜你在找的Java相关文章