Я получаю очень странное поведение из Hibernate.
Если я выполню следующий запрос, все будет работать как положено:
Criteria crit = session.createCriteria( Message.class )
.add( Restrictions.lt( "sequenceReceived", Long.valueOf( 10 ) ) )
.createAlias( "this.commands", "cmd", CriteriaSpecification.LEFT_JOIN);
«работает как положено» означает, что я получаюresultSet of Message, где Message.commands были с нетерпением извлечены.
Однако следующий запрос НЕ работает так же:
Criteria crit = session.createCriteria( Message.class )
.add( Restrictions.lt( "sequenceReceived", Long.valueOf( 10 ) ) )
.createAlias( "this.commands", "cmd", CriteriaSpecification.LEFT_JOIN, Restrictions.eq( "cmd.priority", 1 ) ));
Единственное добавленное мной изменение - это дополнительноеограничение для предложения OUTER LEFT JOIN ON.Теперь сгенерированный SQL стал
ВЫБРАТЬ [...] ИЗ сообщений this_ ЛЕВЫЕ ВНЕШНИЕ СОВМЕСТНЫЕ команды1015 * Проблема в том, что теперь набор результатов все еще содержит Message, но message.commands извлекаются лениво.
Почему это происходит, и есть ли способ заставить эту загрузку происходить с нетерпением?
Примечание: у меня есть три createEntity, которые ведут себя идентично.