2

我有一个主表 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 信息。我怎样才能做到这一点?

4

1 回答 1

0

为什么不能使用@ManyToOne关系?它通常提供比@OneToOne

于 2013-03-28T21:31:43.470 回答