2012-05-28 126 views
1

我有兩個實體User和Department,這兩個實體(OneToMany和ManyToOne)之間存在雙向關係,我管理一個服務類中的關係,該服務類負責處理在部門中刪除和添加用戶以下:刪除JPA中的實體雙向OneToMany

List<User> originalUserList = userJpaRepository.findAllByDepartment(department); 
for (Iterator<User> iterator = originalUserList.iterator(); iterator.hasNext();) { 
    User user = iterator.next(); 
    if (!department.getDepartmentEmployees().contains(user)) { 
     user.setDepartment(null); 
     userJpaRepository.save(user); 
    } 
} 
for (User user : department.getDepartmentEmployees()) { 
    user.setDepartment(department); 
    userJpaRepository.save(user); 
} 
Department savedDepartmetn = jpaRepository.save(department); 
return savedDepartmetn; 

一切正常添加和刪除用戶被反映到數據庫中,但唯一的問題是在倒數第二行中,isntance savedDepartment仍將包含已刪除的用戶,因爲Hibernate從選擇填充其數據發生在對用戶所做的更改實際刷新到數據庫之前。什麼是這裏最好的辦法,

  • 我應該保存部門之前(如果儲蓄部門未將事務回滾)
  • 我應該刷新savedInstance返回給調用者之前刷新
  • 任何其他的想法。
+0

選項工作正常,我猜沒有性能影響。 –

回答

2

由於您使用的是附屬實體,因此無需保存任何內容。 JPA會自動將所做的更改保存到附加實體中。

而且當您有雙向關聯時,您有責任在兩側進行更改以確保您的對象模型一致。如果您將user.department設置爲空,則還應該從department.users中刪除該用戶。

我不明白上面的代碼是做什麼的,但刪除調用來保存,並維護協會的雙方,一切都會好起來。