【问题标题】:Using partial Composite Key in one-to-many Hibernate mapping在一对多 Hibernate 映射中使用部分复合键
【发布时间】:2012-08-10 13:17:09
【问题描述】:

我有EmployeeDepartment 的下表结构。 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,当您有一个具有复合键的表和另一个主键是该复合键的子集的表时。

【问题讨论】:

  • 这个连接看起来怎么样?
  • 另一个问题:真的有必要拥有所有这些复合键吗? NH 作为 ORM 不太喜欢复合键。

标签: hibernate mapping one-to-many


【解决方案1】:

我不太清楚您所说的“加入”是什么意思...您的问题听起来可能与此有些相似...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2017-08-19
    • 2021-12-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多