我不是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