加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA更新双向关联

发布时间:2020-12-14 06:01:31 所属栏目:Java 来源:网络整理
导读:假设我们有以下实体: @Entity public class Department { @OneToMany(mappedBy="department") private ListEmployee employees; } @Entity public class Employee { @ManyToOne private Department department } 在更新时可以理解,我们需要保持关系的双方如
假设我们有以下实体:
@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方法处于活动状态时,实体的内存状态也可以在其他时间同步到数据库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读