我对EmployeeDepartment具有以下表结构。 Employee的组合键分为三列-EMP_IDDEPT_IDDEPT_CODE但是,部门只有两列与Employee-DEPT_IDDEPT_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

最佳答案

我不太确定您所说的“加入联接”是什么意思。您的问题听起来可能与此类似。

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

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

关于hibernate - 在一对多Hibernate映射中使用部分组合键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11949063/

10-10 13:07