您好 我有这样的映射:
<class entity-name="Person">
<id name="id" type="long" column="ID">
<generator class="sequence"/>
</id>
<property name="FirstName" column="FIRST_NAME" type="string"/>
<property name="LastName" column="LAST_NAME" type="string"/>
<bag name="Addresses" inverse="true" lazy="false" cascade="all"> <key column="Person_ID"/>
<one-to-many class="Address"/> </bag>
<class entity-name="Address">
<id name="id" type="long" column="ID">
<generator class="sequence"/>
</id>
<property name="City" column="City" type="string"/>
<property name="Country" column="Country" type="string"/>
<property name="PersonId" column="Person_ID" type="long"/>
</class>
我需要取回住在巴黎的所有人。为此,我使用查询 选择p来自Person p inner join地址a on p.Id = a.PersonId其中a.City如'Paris' 这是O.k. 但是Nhbernate执行另一个查询,从地址a中选择一个a.PersonId(所有生活在巴黎的人) 但这是不必要的,山区NHibernate可以从加入(第一次查询)
获取所有字段的地址我是否可以阻止运行第二个查询并从第一个查询中获取所有需要的信息????
答案 0 :(得分:0)
是的,你可以,你只需要指定一个提取。这将初始化地址集合。
http://www.nhforge.org/doc/nh/en/index.html#queryhql-joins
select p from Person p inner join fetch
Address a on p.Id=a.PersonId where a.City like 'Paris'