Организация сопоставляется Адрес в 1-к-1:Hibernate - п + 1 выберите запросы с 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>
этот запрос генерирует дополнительный переход для каждой организации + 1:
query = session.createQuery("select o from Organization as o where o.isCool=0").setReadOnly(true);
organizations = query.list();
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html сообщает fetch="join"
, но это не имеет никакого значения. Как решить эту проблему? Любая помощь приветствуется.
EDIT В отладчике я вижу, что адрес на самом деле не ленивый, я понятия не имею, почему.
Благодарим за ответ. Но эффективно ли хранить все данные в памяти и не использовать их? Я не возражаю против использования hql. Так что мне нужно использовать критерии? – emmma1223
Вы можете продолжать использовать HQL. Фактически, он все равно доставит вам только нужный материал (записи, где условие o.isCool = 0 истинно), но без выполнения n + 1 выборки - то есть, если вы используете предложение FETCH JOIN. – PaiS
, пожалуйста, не стесняйтесь, я не совсем понимаю. Итак, вы говорите, что объединение fetch не будет инициализировать адреса? – emmma1223