2012-08-14 85 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不正確?如果你能澄清你的問題,你可能會得到更好的答案。