我不是100%確定這只是一個Hibernate問題,因爲這可能是一個更抽象的決定,但我會試一試。
由於問題描述有點冗長,我將首先聲明我想要做的是看看我是否可以將實現更改爲更類似於最佳實踐的實現。如何實現與Hibernate的3多對多關係?
我有3個與此問題相關的實體:工作站(ws),員工和組織單位(組織單位)。
員工可以屬於一個組織單位。
一個組織單位可以容納很多員工。
工作站用於顯示組織單位(一般情況下),組織單位和特定員工以及不屬於組織單位的員工的數據。
目前,由於各種原因,爲不受我控制,我們不使用Hibernate中的實體或通過DB約束之間的任何關聯,但我們只是使用邏輯上充當外鍵的列。
我們目前有一個額外的表,其中有4列:Id,WSId,EmployeeId,OrgUnitId。
這允許WS引用一個orgunit(其中employeeId爲null),一個沒有組織單位(orgunitId爲空)的僱員或者一個僱員和org-unit(其中都不爲空)。
我希望能夠知道:
1.Given一個WS,哪些員工是它下面和組織單位,以及如何(即獨自一人,與員工哪個?)
2。給定一名員工,WS正在監控它。
3.給定一個組織單位,哪個WS正在監視它以及如何(即,單獨與員工?哪個?)
這個問題與表示層有關,因爲它決定了視圖會被生成但是它是一個部分域模型作爲用戶將使用一個接口來操作這些監視映射,因此這些映射是域模型的一部分。
我不確定我所擁有的東西在選項中並不是最不可避免的,我會非常感謝意見和建議。
EDIT從其中一個答案中,我認爲WS並不能清楚地顯示出許多這樣的映射的數據同時在上述類型(組織,僱員等)
感謝您的回覆。我不確定在組織/員工中,WS的@OneToOne映射作爲單個組織單位/員工的@OneToOne映射可以被許多WS同時監控。 另外,你的'WorkstationEmployeeBinding'是我想到的,但是如果你從註釋的開頭添加我的輸入,你會看到我還需要'WorkstationOrgUnitBinding'和'OrgUnitEmployeeBinding'來反映所有的多對多。所有這些額外的虛擬類別都不覺得是正確的方向,但我可能會誤解。謝謝。 – Ittai 2010-08-26 13:13:59
@Ittai現在,這裏有一個更簡單但更靈活的解決方案,只有一個綁定類 – 2010-08-26 13:46:47
感謝您的解決方案。我希望有一個「內部」的休眠解決方案,但我想這是必須要做的。再次感謝 – Ittai 2010-08-28 15:32:40