#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'