一对多双向Map和持久顺序问题

ukxgm1gy  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(232)

我有两个具有双向一对多关系的实体:

@ManyToOne
@JoinColumn(name = "department_id")
public Department getDepartment() {
    return department;
}

@OneToMany(mappedBy="department")
public Collection<EmployeeMapping> getEmployees() {
    return employees;
}

下面是我的单元测试:

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);

不保存employee1和employee2。测试执行后,它们不在表中。departme类型的actualobject不存在。
我的问题是为什么当我得到一个部门使用: departmentDao.get( object.getId() ); 这个 actualObject 有一个雇员集合,尽管他们不能从表中卸载。他们没有得救。也许departmentdao在里面使用了一个缓存。我不确定,请解释一下。
不管怎样,我想这样 object 以及 actualObject 在这个测试中是不相等的。如何存档?我希望只有当我拯救两个雇员时,他们才是平等的。
最后一个问题,实体保存的顺序。员工和部门之间都有联系。这是一种双向关系。我应该先保存一个部门,然后才保存员工还是订单无关紧要?你能给我解释一下吗。谢谢。

pobjuy32

pobjuy321#

“我希望实际对象和对象不同”:这取决于:
equals方法的实现
dao的set操作是否通过引用更新“object”
保存one2many的顺序:保存外键的对象应该最后保存。在这个例子中,您有:
雇员(雇员ID、姓名等…、部门ID)
部门(部门ID、部门名称等)
==>这意味着在保存员工时应该保存部门allready(部门id必须存在/已解析)。
actualobject(从departmendao检索)包含空的employee集合,因为这些employee并没有像您自己所说的那样保存。
希望这有帮助,干杯!

相关问题