我有一个主表是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信息。我怎么能这样做?
答案 0 :(得分:0)
为什么不能使用@ManyToOne
关系?它通常比@OneToOne