Employee
我有一种用于和的下表结构Department
。的复合键Employee
有三列 - EMP_ID
, DEPT_ID
,DEPT_CODE
但部门只有两列与 Employee 的复合键相匹配 - DEPT_ID
, DEPT_CODE
。
<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
。
那么有什么办法可以解决这个问题。如何在休眠映射文件中配置join
/ one-to-many mapping
,当您有一个具有复合键的表和另一个主键是该复合键的子集的表时。