当前位置: 首页 > 知识库问答 >
问题:

在一对多Hibernate映射中使用部分复合密钥

鞠宏恺
2023-03-14

对于员工部门,我有如下表格结构。Employee的复合键有三列——EMP\u IDDEPT\u IDDEPT\u code,但部门只有两列与Employee的复合键匹配——DEPT\u IDDEPT\u 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放在Employeemapping xml中的“列出部门键列”下,应用程序将加载,但在Department表中没有匹配的列。

那么有什么方法可以解决这个问题。如何在Hibernate映射文件中配置连接/一对多映射,当您有一个表带有复合键,而另一个表的主键是该复合键的子集时。


共有1个答案

梁丘扬
2023-03-14

我不太清楚你说的“加入”是什么意思。。。你的问题听起来可能有点类似。。。

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

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

 类似资料:
  • notification_detail-单个主键 我想使用JPA持久化和读取这些对象,但无法使ManyToOne映射工作。 许多通知映射到一个notification_detail。 我试过所有类型的不同配置。我能想到的最好的办法是,我的情况很复杂,因为父对象“notification_detail_id”有一个复合键“notification_detail_id”,它也是子对象的主键。这使得Hi

  • 下面的映射给出的错误为 从db.karateInvoiceDetail引用db.karateInvoice的外键的列数错误。应为1 想法是有一个表,它的组合键为(id、fiscalyear和companyId),而表的组合键为(seqNo、InvoiceId、InvoiceFiscalYear和InvoiceCompanyId)。

  • 我有以下两个类(和他们的pk类)与这些注释。我删除了setters/getters/hashcode/equals来压缩示例 我最终得到了这个错误 我的猜测是,因为“年”是在联接表中共享的,所以我弄乱了一些关联实体的语法。请注意,这些视图的实体之间存在隐式关系,我正试图在注释中对其建模。我尝试了一些JPA建模工具,这些工具在建模后给了我同样的错误。我已尝试将联接列设置为,并将设置为。 我当然可以只

  • 假设我想要一个复合键作为采购订单实体的street,city。 下面是我如何识别做这件事, 我想明白@AttributeOverrides注释到底是做什么的?即使我将colomn name更改为something STREET1,我仍然看到使用列名street创建的表。那么column=@column(name=“street”))在这里做什么。 另外,我可以将它作为PurchaseOrder类的

  • 我想查询使用hibernate通过内连接连接的两个表。 以下是两个表格。 创建表(INT(20)非空AUTO_INCREMENT,VARCHAR(50)非空默认'0',主键() ) 创建表(INT(20)非空,INT(20)非空默认值“0”,主键(),约束外键()引用) 这两个表具有一对多关系。 这些束的豆类如下。 但我在说 “……构造函数引发异常;嵌套异常为org.hibernate.Mappi

  • 我已经尝试了表2的hibernate映射: 上面不起作用。在获取记录时,它试图从表2中获取表1中根本不存在的LOB代码