一对多的NHibernate

时间:2011-05-22 16:16:46

标签: nhibernate nhibernate-mapping

您好 我有这样的映射:

<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可以从加入(第一次查询)

获取所有字段的地址

我是否可以阻止运行第二个查询并从第一个查询中获取所有需要的信息????

1 个答案:

答案 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'