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

Java Hibernate-n+;1选择1对1的查询,java,hibernate,hql,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" uniqu

组织以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>
告诉您如何
fetch=“join”
,但这没有任何区别。如何解决这个问题?感谢您的帮助

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

因为您使用HQL来获取您的内容,所以简单地使用注释或您正在尝试的属性来避免n+1问题是没有帮助的

正确的解决方案是在查询中使用'fetchjoin'子句。有关详细信息,请访问以下链接:

谢谢您的回复。但是,将所有这些获取的数据保存在内存中而不使用它是否有效?我不介意不使用hql。所以我需要使用标准?您可以继续使用HQL。事实上,它仍然只会获取所需的内容(条件o.isCool=0为真的记录),但不执行n+1获取-这是如果您使用fetch JOIN子句的话。请耐心听我说,我不太明白。你是说fetch join不会初始化地址?啊,也许我现在理解得更好了。您担心与父对象一起获取的关联记录吗?如果这是你的问题,那么它与n+1问题没有多大关系。您应该使用延迟抓取,以便Hibernate不会获取实际关联的对象。如果我错了,请纠正我,我很乐意进一步澄清/帮助。很抱歉打扰你,我对编程很陌生。我已经在使用惰性抓取(默认情况下是打开的,对吗?)。所以它要么是n+1选择并拥有代理,要么是获取连接以初始化关联的地址,即使我不需要它们?内存使用与速度?
   query = session.createQuery("select o from Organization as o where o.isCool=0").setReadOnly(true);
   organizations = query.list();