Chr*_*Geo 11 java hibernate jpa bidirectional-relation
让我们假设我们有以下实体:
@Entity
public class Department {
@OneToMany(mappedBy="department")
private List<Employee> employees;
}
@Entity
public class Employee {
@ManyToOne
private Department department
}
Run Code Online (Sandbox Code Playgroud)
在更新中我们需要维护关系的两个方面,这是可以理解的,如下所示:
Employee emp = new Employee();
Department dep = new Department();
emp.setDepartment(dep);
dep.getEmployees().add(emp);
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到现在.问题是我应该如下所示在双方应用合并,并且我避免第二次合并级联?
entityManager.merge(emp);
entityManager.merge(dep);
Run Code Online (Sandbox Code Playgroud)
或者正在合并拥有方?这些合并也应该发生在Transaction或EJB中吗?或者在具有分离实体的简单控制器方法上执行它就足够了?
Deb*_*kia 12
问题是我应该如下所示在双方应用合并,并且我避免第二次合并级联?
您可以使用级联注释元素将操作的效果传播到关联实体.级联功能最常用于父子关系.
该merge操作级联到由关系引用的实体Department,如果这些关系已经标注了该cascade元素的值cascade=MERGE或cascade=ALL注释.
管理实体之间的双向关系将基于(Employee)关系所属方所持有的引用而持久化.开发人员有责任保持内存引用保持在拥有方(Employee),而保持在反方(Department)保持的内容引用在更改时保持一致.因此,通过以下系列语句,关系将与数据库同步merge:
Employee emp = new Employee();
Department dep = new Department();
emp.setDepartment(dep);
dep.getEmployees().add(emp);
...
entityManager.merge(dep);
Run Code Online (Sandbox Code Playgroud)
这些更改将在事务提交时传播到数据库.当事务处于活动状态时,使用EntityManager#flush方法,实体的内存中状态也可以在其他时间同步到数据库.
| 归档时间: |
|
| 查看次数: |
10255 次 |
| 最近记录: |