【问题标题】:One-to-many bidirectional mapping and persistance order issue一对多双向映射和持久化顺序问题
【发布时间】:2013-06-02 01:20:20
【问题描述】:

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

@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 未保存。测试执行后,它们不会出现在表中。 actualObject - Departme 类型 - 确实存在。

我的问题是为什么当我得到一个部门时使用:departmentDao.get( object.getId() ); actualObject 有一个员工集合,尽管他们不能从表中卸载。他们没有得救。也许 departmentDao 在内部使用了缓存。我不确定,请解释一下。

无论如何,我希望 objectactualObject 在此测试中不相等。我该如何存档?我希望他们只有在我拯救两个员工时才能平等。

最后一个问题,实体保存的顺序。员工和部门之间都有链接。是双向的关系。我应该先保存一个部门,然后再保存员工,还是顺序无关紧要?你能帮我解释一下吗? 谢谢。

【问题讨论】:

    标签: java jpa orm mapping


    【解决方案1】:

    “我希望实际对象和对象不同”: 这取决于:

    1. equals方法的实现
    2. DAO的SET操作是否通过引用更新“对象”

    保存 one2many 的顺序: 保存外键的对象应该最后保存。 在这个例子中你有:

    1. employee(employeeid, name, etc..., departmentID)
    2. 部门(部门ID、部门名称等...)

    ==> 这意味着在保存员工时,部门应该已经被保存(部门 id 必须存在/被解析)。

    • actualObject(从 departmenDao 检索)包含员工的空集合,因为员工没有像您所说的那样保存。

    希望这会有所帮助,干杯!

    【讨论】:

    • 最后一个问题。 actualObject 不包含空集合。我不明白为什么。
    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2011-03-10
    • 2011-11-01
    • 2017-01-12
    • 2020-05-22
    相关资源
    最近更新 更多