После обновления к более новой версии гибернации (предположительно, это произошло с переключением с JBoss 4.2.2 на JBoss 6), некоторые запросы завершаются с ошибкой с сообщением:
Вызвано: java.lang.IllegalArgumentException: org.hibernate.QueryException: запрос с указанным соединением выборка, но владелец выбранной ассоциации не присутствует в списке выбора [FromElem ent {явное, не объединение коллекции, соединение выборки, выборка неленивых свойств, classAlias = null, role = null, tableName = (...)
Это всегда имеет место при использовании такого запроса:
SELECT entityA FROM EntityA entityA
JOIN FETCH entityA.entityB
LEFT JOIN FETCH entityA.entityB.someField
WHERE entityA.entityB.anotherField LIKE :someParameter
Решение проблемы состоит в том, чтобы дать "entityA.entityB" псевдоним, а затем использовать этот псевдоним в предложении WHERE
. Но в некоторых запросах LEFT JOIN FETCH
явно не указывается, но все же предложение WHERE
использует свойство объекта, на который имеется ссылка. Там тоже не получится? Что изменилось, так что он внезапно выходит из строя после перехода на новую версию JBoss?
Следующий вопрос связан с этим вопросом и включает решение, но не объясняет проблему.