NHibernate «Один ко многим»

#nhibernate #nhibernate-mapping

#nhibernate #nhibernate-сопоставление

Вопрос:

привет, у меня есть отображение, подобное этому :

 <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 a на p.Id=a.PersonID где a.Город, подобный «Парижу»
И это нормально.
Но Nhbernate выполняет еще один запрос, выберите a из адреса a, где a.PersonID в (все идентификаторы лиц, которые живут в Париже)
но в этом нет необходимости, mountains NHibernate может получить все поля адреса из join (первый запрос)

Могу ли я запретить выполнение второго запроса и получить всю необходимую информацию из первого запроса????

Ответ №1:

Да, вы можете, вам просто нужно указать выборку. Это инициализирует коллекцию адресов.

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'