2013-06-06 24 views
0

我得有一個雙向一個一對多的關係的兩個實體:一個一對多的雙向映射和持久性秩序的問題

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

員工1和員工2未保存。測試執行後,它們不在表中。實際對象 - Departme類型 - 確實存在。

我的問題是爲什麼當我得到一個部署使用:departmentDao.get(object.getId());actualObject有一個僱員的集合,雖然他們不能從表中卸載。他們沒有得救。也許departmentDao使用裏面的緩存。我不確定,請解釋一下。

無論如何,我想這樣objectactualObject將在這個測試不相等。我如何存檔它?我希望只有當我挽救兩名員工時,他們纔是平等的。

而最後一個問題,實體保存的順序。員工和部門之間都有鏈接。這是一種雙向關係。我應該首先保存一個部門,只有員工或訂單無關緊要?你能爲我解釋一下嗎? 謝謝。

回答

0

「我想實際的對象,併爲不同的對象」: 這取決於:

  1. equals方法
  2. 閹或不DAO的SET操作的實現更新「對象」

保存一二進制的順序: 保存該外鍵的對象應保存到最後。 在這個例子中,你有:

  1. 員工(僱員,姓名等...,DepartmentID的
  2. 部門(DepartmentID的,DEPARTMENTNAME等)

= =>這意味着在保存員工時,部門應該已經保存(部門標識必須存在/被解析)。

  • actualObject(從departmenDao檢索到)包含員工的空集合,因爲員工沒有按照自己的說法保存。

希望這會有所幫助,歡呼!

+0

最後一個問題。 actualObject不包含空的collecton。我無法理解爲什麼。 – Alexandr