«Автоматическое» извлечение объединения вложенных объектов завершается неудачно после обновления Hibernate - PullRequest
6 голосов
/ 08 июля 2011

После обновления до более новой версии гибернации (возможно, она пришла с переходом с JBoss 4.2.2 на JBoss 6), некоторые запросы завершаются с ошибкой:

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,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?

Следующий вопрос связан с этим вопросом и включает решение, но не объясняет проблему.

Ответы [ 2 ]

3 голосов
/ 22 июня 2012

Запрос должен быть

SELECT entityA FROM EntityA entityA 
JOIN FETCH entityA.entityB entityB
LEFT JOIN FETCH entityB.someField
WHERE entityB.anotherField LIKE :someParameter

т.е. Вы должны назначить псевдоним каждому присоединенному объекту и использовать этот псевдоним для последующих объединений или ограничений.

0 голосов
/ 22 апреля 2016

У меня такая же проблема в моем проекте, и ее очень трудно решить, потому что у меня большая устаревшая система с большим количеством модулей, которые используют предварительно скомпилированные именованные запросы и множество запросов, созданных по требованию. Идентифицировать и модифицировать всю систему и вносить изменения там, где она работала, а также использовать старую версию hibernate - это очень раздражающая работа и подвержена ошибкам. Я рассматриваю эту проблему в JBoss с 6.4 до 6.4.6, когда версия hibernate была обновлена ​​с 4.2.18 до 4.2.22, и эта ошибка появляется. Чтобы решить эту проблему, я делаю понижение версии только основного модуля hibernate до первоначальной версии по умолчанию 4.2.18, но это не очень хорошо, потому что, когда появится следующий патч JBoss, мне нужно его снова изменить. Я пытаюсь использовать модули JBoss и некоторые конфигурации в файлах persistence.xml и jboss-deploy-strcuture.xml, но пока безуспешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...