Java 一对多双向映射和持久顺序问题
我有两个具有双向一对多关系的实体:Java 一对多双向映射和持久顺序问题,java,jpa,orm,mapping,Java,Jpa,Orm,Mapping,我有两个具有双向一对多关系的实体: @ManyToOne @JoinColumn(name = "department_id") public Department getDepartment() { return department; } @OneToMany(mappedBy="department") public Collection<EmployeeMapping> getEmployees() { return employees; } @ManyT
@ManyToOne
@JoinColumn(name = "department_id")
public Department getDepartment() {
return department;
}
@OneToMany(mappedBy="department")
public Collection<EmployeeMapping> getEmployees() {
return employees;
}
@ManyToOne
@JoinColumn(name=“部门id”)
公共部门{
退货部;
}
@OneToMany(mappedBy=“部门”)
公共集合getEmployees(){
返回员工;
}
下面是我的单元测试:
Department object = new Department();
object.setName("Test Department Object");
assertEquals("Object ID is not persistent yet", 0L, object.getId());
EmployeeMapping employee1 = new EmployeeMapping();
employee1.setName("Employee 1");
EmployeeMapping employee2 = new EmployeeMapping();
employee2.setName("Employee 2");
Collection<EmployeeMapping> collection = ImmutableSet.of( employee1, employee2 );
object.setEmployees( collection );
departmentDao.save(object);
assertNotEquals("Object ID is persistent", 0L, object.getId());
Department actualObject = departmentDao.get( object.getId() );
assertEquals("The actual object in the database must be equal to the original value", object, actualObject);
部门对象=新部门();
object.setName(“测试部门对象”);
assertEquals(“对象ID尚未持久化”,0L,Object.getId());
EmployeeMapping employee1=新EmployeeMapping();
雇员1.设置名称(“雇员1”);
EmployeeMapping employee2=新EmployeeMapping();
雇员2.设置名称(“雇员2”);
Collection Collection=ImmutableSet.of(employee1,employee2);
对象。setEmployees(集合);
departmentDao.save(对象);
assertNotEquals(“对象ID是持久的”,0L,Object.getId());
Department actualObject=departmentDao.get(object.getId());
assertEquals(“数据库中的实际对象必须等于原始值”,object,actualObject);
不保存employee1和employee2。测试执行后,它们不在表中。actualObject-属于Departme类型-不存在
我的问题是,当我使用:departmentDao.get(object.getId())获取一个部门时,为什么要这样做
虽然不能从表中卸载员工,但actualObject
有一个员工集合。他们没有得救。也许departmentDao在内部使用缓存。我不确定,请解释一下
无论如何,我希望object
和actualObject
在这个测试中不相等。如何存档?我希望只有当我拯救两名员工时,他们才会平等
最后一个问题,实体保存的顺序。员工和部门之间都有链接。这是一种双向关系。我应该先保存一个部门,然后才保存员工还是订单无关紧要?你能给我解释一下吗。
谢谢。我希望实际对象和对象不同:
这取决于:
- actualObject(从DepartmentDao检索)包含空的员工集合,因为员工并没有像您自己所说的那样保存
希望这有帮助,干杯 最后一个问题。actualObject不包含空Collection。我无法理解为什么。