2012-06-01 206 views
0

我對關係中管理實體感到困惑。根據 PRO JPA2,關係應在關係的兩端手動配置和分配。關於JPA2關係管理

現在,考慮這種關係。

@Entity 
public class Employee { 
    .. 
    @ManyToOne(cascade=CascadeType.PERSIST) 
    private Department department; 
    .. 
} 
@Entity 
public class Department { 
    .. 
    @OneToMany(mappedBy="department") 
    private Set<Employee> employees = new HashSet<Employee>(); 

    public void addEmployee(Employee e){ 
     getEmployees().add(e); 
     e.setDepartment(this); 
    } 
} 

我做了一個簡單的測試用例,涉及到這一行代碼來驗證這一點。

Department dept1 = new Department(); 
dept1.setName("MARKETING"); 

Employee e1 = new Employee(); 
e1.setName("JOHN DOE"); 

e1.setDepartment(dept1); //[1] 
//dept1.addEmployee(e1); //[2] 

考慮行[1]: 我認爲這將無法與正確的部門ID更新Employee表,但我查了德比,這是 能夠正確執行更新

考慮行[2]: 根據這本書,這是正確的方法。

任何人都可以幫助清除我的疑問嗎?

的EclipseLink /德比/ JPA2

回答

1

如果你不喜歡它的線[1],員工「E1」將被存儲在數據庫與FK確定,但...如果你係DEPT1和調用裝getEmployees();員工'e1'將不在此列表中。即使您重新進行查詢以從數據庫中獲取該部分,它不會有Employee'e1'(至少在您重新申請應用程序之前)。這就是爲什麼你應該總是這樣做[2]。
當我開始使用JPA2時,我不知道這一點;並堅持像[1]中的實體。我幾乎瘋了,試圖確定爲什麼最近持久的實體不被JPA讀取,但實際上存儲在數據庫中。

+0

啊..所以這就是原因..謝謝Damian。 –

+0

@MarkEstrada沒問題! – Damian