在外键上一对一地休眠

时间:2013-03-28 20:05:31

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

我有一个主表是D1,其唯一ID为d1Id。 d1Id唯一标识D1记录,也是表中的主键。我有表2是D2,它有一个d2seq作为主键,但D2也有d1Id,它是唯一的,在D1上有一个外键约束(我认为)。但我确信它是独一无二的,而且id也是一样的。当我使用hibernate进行D1调用时,我正在尝试检索d2值,而我无法获得正确的hbm,因为我收到编译时错误。

问题的底线是,我需要在2个表之间建立一对一的关系,在第二个表中,连接的id不是表的主键。我见过的所有搜索google的例子都有第二个表中的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的第二个版本中,我被困在这里

<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&gt;它不是主键,2&gt;我以前用过它。那么我的HBM文件应该如何用于此操作呢?

一旦我的HBM到位,我想在通过DTO查询D1时获取D2信息。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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

提供更大的灵活性