我对Employee
和Department
有以下表结构。 Employee
的复合键有三列 - EMP_ID
,DEPT_ID
,DEPT_CODE
但是,该部门只有两列符合员工的复合键 - 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中的“list departments键列”下,则应用程序会加载但Department
表中没有匹配的列。
有没有办法解决这个问题。如何在hibernate映射文件中配置join
/ one-to-many mapping
,如果有一个表具有复合键,而另一个表的主键是该复合键的子集。
答案 0 :(得分:0)
我不太确定你说“加入”是什么意思......你的问题听起来有点类似于此......
https://forum.hibernate.org/viewtopic.php?f=1&t=985555
也许问题是您尝试加入的hql(您没有提供)是不正确的?如果你能澄清你的问题,你可能会得到更好的答案。