【问题标题】:hibernate one to one on foreign key在外键上一对一休眠
【发布时间】:2013-03-28 20:05:31
【问题描述】:

我有一个主表 D1,它的唯一 ID 为 d1Id。 d1Id 唯一标识 D1 记录,也是表上的主键。我有表 2,它是 D2,它有一个 d2seq 作为主键,但 D2 也有 d1Id,它是唯一的,它在 D1 上有一个外键约束(我认为)。但我确定它是独一无二的,并且 id 是相同的。当我使用休眠进行 D1 调用时,我试图检索 d2 值,但由于出现编译时错误,我无法为其获取正确的 hbm。

问题的底线是,我需要在 2 个表之间建立一对一的关系,其中在第二个表中,连接的 id 不是表的主键。我在谷歌上看到的所有示例都有第二个表上的 ID 也是第二个表的主键的情况。让我向您展示我现在拥有的 HBM 文件。

<hibernate-mapping default-lazy="true"
package="com.xxx.xx.customer.dto">
<class name="D1" table="D1" dynamic-update="true">
    <id name="dString" column="DID" type="java.lang.String"
        unsaved-value="null" length="9">
        <generator class="assigned"/>
    </id>
...

<one-to-one name="d2" class="com.xxx.xx.customer.dto.D2" >
        <!-- column name="d1Id" /-->
    </one-to-one>

在 D2 的第二个 hbm 中,我被困在这里

<hibernate-mapping default-lazy="true" package="com.xxx.xx.customer.dto">
<class name="D2" table="D2" dynamic-update="true">
    <id name="id" column="D2ID" type="integer">
        <generator class="native">
            <param name="sequence">D2SEQ</param>
        </generator>
    </id>

<id name="d1id" column="D1ID" type="java.lang.String"
        unsaved-value="null" length="9">
        <generator class="assigned"/>
    </id>

我显然不能在这里为 d1id 使用第二个 id 字段,因为 1> 它不是主键,并且 2> 我以前已经使用过它。那么我的 HBM 文件应该如何用于此操作?

此外,一旦我的 HBM 就位,我想在通过 DTO 查询 D1 时获取 D2 信息。我该怎么做?

【问题讨论】:

    标签: java hibernate foreign-key-relationship one-to-one hbm


    【解决方案1】:

    为什么不能使用@ManyToOne 关系?通常它比@OneToOne提供更多的灵活性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多