2012-12-05 164 views
0

我有了這個映射在我的UserPO實體:休眠ElementCollection孩子刪除

@ElementCollection 
@JoinTable(name = "role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "department") }) 
@MapKeyJoinColumn(name = "mission") 
private Map<MissionPO, DepartmentListPO> departmentsByMission = new HashMap<MissionPO, DepartmentListPO>(); 

我使用一個表DepartmentList和DepartmentListPO作爲Map<MissionPO, List<DepartmentPO>>似乎不是與Hibernate(或JPA)的選項

到目前爲止,用戶可以被授予限制在部門列表中的任務。

例: 湯姆任務1對部門10和11

我的問題是,如果我刪除一個任務:

departmentsByMission.remove(mission) 

role一行鏈接用戶/任務/ DepartmentList不刪除。 我讀了很多線程,似乎批量刪除不可能與ElementCollection

我試圖在DepartmentList外鍵上的角色表上使用約束ON CASCADE DELETE,但這似乎與我想要的相反。刪除一個DepartmentList將刪除該角色。

所以我想在actorremoveMission方法中做類似entityManager.remove(departmentList)的操作。

不幸的是,PersistentContext似乎不能放在User實體中。

所以我有點困惑會是什麼解決方案,知道我想避免數據庫觸發器。

感謝您的任何解決方案,我真的卡在那裏。

回答

1

我認爲這個問題是由數據模型造成的,而不是ORM,休眠或JPA的問題。從我的經驗看來,這似乎是一種非常規的方法。

任務可以是其自己的實體,其中包含也作爲實體存在的部門屬性。在創建任務地圖時,使用數據庫中的代理鍵作爲地圖的關鍵點會更有用。我鼓勵你花時間審查你的數據模型,以找出需要映射的其他實體。

+0

任務應該與部門無關,因爲同一個任務可以分配給不同部門的不同用戶。一項任務可以在沒有給予用戶的情況下生活。但是你是對的,也許我可以爲角色表創建一個實體 –

+0

在這種情況下,我會在任務中包含一個用戶屬性。但是你有沒有得到我想要做的更大的觀點?對這些表使用代理鍵將使您的生活更輕鬆。 –

+0

好吧,我現在明白了,我不是英語專家,所以我「繞過」代理人而沒有真正意識到這一點很重要。我會這樣做,但似乎使用Map和ElementCollection是我的刪除問題點沒有? –