Я задал этот вопрос на форумах Hibernate, но не получил полного ответа, поэтому я решил опубликовать его здесь.Вот оригинальный поток вопросов:
http://forum.hibernate.org/viewtopic.php?f=1&t=1008243&p=2438963#p2438963
В двух словах, у меня есть собственный запрос HQL, который объединяет две совершенно не связанные таблицы, и я пытаюсь предотвратить "O (N + 1) выбирает «проблему», отключая загрузку связанных коллекций, которые существуют в моих POJO, отображенных в Hibernate.
Очевидно, я могу использовать для этого Hibernate извлекать профили , но есть загвоздка.Вот что говорит FetchMode.java из Hibernate:
/**
* Fetch using an outer join. Equivalent to <tt>fetch="join"</tt>.
*/
public static final FetchMode JOIN = new FetchMode("JOIN");
/**
* Fetch eagerly, using a separate select. Equivalent to
* <tt>fetch="select"</tt>.
*/
public static final FetchMode SELECT = new FetchMode("SELECT");
/**
* Fetch lazily. Equivalent to <tt>outer-join="false"</tt>.
* @deprecated use <tt>FetchMode.SELECT</tt>
*/
public static final FetchMode LAZY = SELECT;
Итак, «LAZY» на самом деле не ленив, это просто «SELECT», чего я и стараюсь избегать.
Существует ли режим выборки, который не позволяет загружать коллекции?Если нет, есть ли другой способ отключить загрузку коллекций в ходе определенного запроса HQL?
Я понимаю, что общепринятый способ сделать это - использовать запросы Criteria, но мне нужно выполнить соединение по произвольному свойству, и, насколько я могу судить, критериев для этого нет.