双向一对一关联:Hibernate获取实体两次

双向一对一关联:Hibernate获取实体两次,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我有两个实体,合同和客户,它们之间定义了一对一的双向关系: 在Customer.hbm.xml中: 在Contract.hbm.xml中: 当迭代在某个HQL查询中获取的客户实体集合时,对于访问合同字段的每个客户,Hibernate为每个“客户”执行两个附加语句: 契约的延迟抓取对我来说是可以的,因为稍后我将使用批大小属性优化延迟抓取。 再次使用SELECT获取客户对象。。。来自客户,其中constractd=? 如何告诉Hibernate使用会话中已经存在的客户实例 编辑: 如果这是不可能的,

我有两个实体,合同和客户,它们之间定义了一对一的双向关系:

在Customer.hbm.xml中:

在Contract.hbm.xml中:

当迭代在某个HQL查询中获取的客户实体集合时,对于访问合同字段的每个客户,Hibernate为每个“客户”执行两个附加语句:

契约的延迟抓取对我来说是可以的,因为稍后我将使用批大小属性优化延迟抓取。 再次使用SELECT获取客户对象。。。来自客户,其中constractd=? 如何告诉Hibernate使用会话中已经存在的客户实例

编辑:
如果这是不可能的,因为客户是通过construcd而不是2中的客户主键获取的,那么这种情况会带来另一个N+1问题,对吗?

我决定使用以下解决方法:


1将合同中的一对一更改为我决定使用以下解决方法:


1将合同中的一对一更改为双向一对一表示您只能为客户签订一份合同,对吗?双向一对一表示您只能为客户签订一份合同,对吗?
....   
<many-to-one name="contract" class="Contract" fetch="select">
    <column name="CONTRACTID" not-null="true" unique="true" />
</many-to-one>
...
<one-to-one name="customer" class="Customer" property-ref="contract" />