Hibernate - n + 1选择1对1的查询

时间:2012-03-16 13:16:17

标签: java hibernate hql

组织映射到地址为1对1:

组织

<one-to-one class="Address" constrained="true" name="address" property-ref="organizationId"/>

地址

<many-to-one class="Organization"  name="organization">
          <column name="OrganizationID" not-null="false" unique="true"/>
  </many-to-one>

此查询为每个Organization + 1生成addtitional select:

   query = session.createQuery("select o from Organization as o where o.isCool=0").setReadOnly(true);
   organizations = query.list();

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html告诉fetch="join",但这没有任何区别。如何解决这个问题呢?任何帮助表示赞赏。

修改 在调试器中,我可以看到该地址实际上并不是延迟加载的,我不知道为什么。

1 个答案:

答案 0 :(得分:1)

由于你使用HQL来获取你的东西,所以简单地使用你正在尝试的注释或属性是没有用的,以避免n + 1问题。

正确的解决方案是在查询中使用'FETCH JOIN'子句。您可以按照以下链接获取更多详细信息: http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects