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