2012-08-14 92 views
3

我对EmployeeDepartment有以下表结构。 Employee的组合密钥有三列 - EMP_ID,DEPT_ID,DEPT_CODE 但该部门只有两列与员工的组合键 - DEPT_ID,DEPT_CODE相匹配。在一对多Hibernate映射中使用部分复合键

<class name="com.test.Employee" table="EMPLOYEE"> 
    <composite-id> 
    <key-property column="EMP_ID" name="empId" type="java.lang.Integer"/> 
    <key-property column="DEPT_ID" name="deptID" type="java.lang.Integer"/> 
     <key-property column="DEPT_CODE" name="deptID" type="java.lang.Integer"/> 
    </composite-id> 
    <property column="EMP_NAME" name="empName" type="java.lang.String"/> 
    <list name="departments" table="DEPARTMENT" fetch="select"> 
    <key> 
    <column name="DEPT_ID"></column> 
     <column name="DEPT_CODE"></column> 
    </key> 
    <index/> 
    <one-to-many class="com.test.Department" /> 
    </list> 
</class> 

<class name="com.test.Department" table="DEPARTMENT"> 
    <composite-id> 
     <key-property column="DEPT_ID" name="deptID" type="java.lang.Integer"/> 
     <key-property column="DEPT_CODE" name="deptID" type="java.lang.Integer"/> 
    </composite-id> 
    <property column="DEPT_NAME" name="deptName" type="java.lang.String"/> 
</class> 

现在我希望把这两桌的加入,但它给错误说主键EMP_ID没有映射。如果我将EMP_ID置于Employee映射xml中的“列表部门关键字列”下,应用程序加载但没有Department表中的匹配列。

所以有什么办法来解决这个问题。如何在hibernate映射文件中配置join/one-to-many mapping,此时您有一个包含复合键的表和其主键是该复合键的子集的其他表。

+0

这个连接是怎么样的? – 2012-08-27 19:22:42

+0

另一个问题:是否真的有必要拥有所有这些复合键?作为ORM的NH不太喜欢复合键。 – 2012-08-27 19:25:53

回答

0

我不太清楚你所说的“把一个加盟” ......你的问题听起来可能有点类似于此的意思......

https://forum.hibernate.org/viewtopic.php?f=1&t=985555

也许问题是,你尝试连接(你没有提供)的hql不正确?如果你能澄清你的问题,你可能会得到更好的答案。