mysql - Hibernate相互一对一关系

标签 mysql hibernate

我有两个类 Hotsheet 和 Invoice 以及它们之间的一对一关系。我需要在两个类中都有一个可以相互链接的属性。这是我的 Invoice 类的 xml 映射。

<hibernate-mapping>
<class name="...Invoice" table="invoices">
    <id name="invoiceId" column="INVOICE_ID"/>

    ...

    <many-to-one
            name="hotsheet"
            column="HOTSHEET">
    </many-to-one>
</class>
</hibernate-mapping>

发票有一个链接到其 Hotsheet 的外键,我还需要 Hotsheet 中的一个属性来包含其发票。如果 Hotsheet 可以有很少的发票,我会这样映射:

<hibernate-mapping>
<class name="package.Hotsheet" table="hotsheets">
    <id name="hotsheetId" column="HOTSHEET_ID"/>

    ...

    <bag name="invoices">
        <key column="HOTSHEET"/>
        <one-to-many class="...Invoice"/>
    </bag>
</class>
</hibernate-mapping>

但是,Hotsheet 将有一个列表,该列表始终只包含一张发票,而我需要一个包含发票的属性,而不是包含一张发票的列表。

最佳答案

您可以关注this link用于 Hibernate 中的一对一映射。所以你的hbm文件可能如下:

<hibernate-mapping>
  <class name="...Invoice" table="invoices">
  <id name="invoiceId" column="INVOICE_ID"/>

  ...

  <many-to-one name="hotsheet" class="package.Hotsheet" column="INVOICE_HOTSHEET"  not-null="true" cascade="all" unique="true" />
  </class>
</hibernate-mapping>


<hibernate-mapping>
  <class name="package.Hotsheet" table="hotsheets">
  <id name="hotsheetId" column="HOTSHEET_ID"/>

  ...
  <one-to-one name="invoice" 
    property-ref="hotsheet"/>
</class>
</hibernate-mapping>

请注意,为了创建一对一关系,我们使用多对一,并将约束唯一设置为true INVOICE_HOTSHEET 列。

BR。

关于mysql - Hibernate相互一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22168035/

相关文章:

mysql "IN"运算符删除几行或几条查询?哪个更快?

mysql - Hibernate MYSQL字符异常

mysql选择动态行值作为列名,另一列作为值

java - ManyToMany 关系上的 PostgreSQL 约束违规错误,但应存在外键

java - @Query注解不填充和执行参数

mysql - 具有跨越多行的 AND 规则的 SQL 过滤器

mysql - 如何将两个求和查询合并为一个?

java - 如何限制 CriteriaBuilder 查询中的记录数?

java - 在 JSP 中编写 Hibernate 查询会给出 java.lang.NullPointerException

hibernate - 什么时候适合使用双向关联,什么时候不适合?