У меня есть несколько объектов, которые запрашиваются с помощью запроса критериев JPA2.Как получить все данные в одном запросе
Я могу присоединиться к двум из этих лиц и получить результат сразу:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<LadungRgvorschlag> criteriaQuery = criteriaBuilder.createQuery(LadungRgvorschlag.class);
Root<LadungRgvorschlag> from = criteriaQuery.from(LadungRgvorschlag.class);
Join<Object, Object> ladung = from.join("ladung");
from.fetch("ladung", JoinType.INNER);
Тогда я пытаюсь соединить дополнительную таблицу так:
ladung.join("ladBerechnet");
ladung.fetch("ladBerechnet", JoinType.LEFT);
я получаю следующее сообщение об ошибке :
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=generatedAlias3,role=null,tableName=ladberechnet,tableAlias=ladberechn3_,origin=ladungen ladung1_,columns={ladung1_.id ,className=de.schuechen.beans.tms.master.LadBerechnet}}] [select generatedAlias0 from de.schuechen.beans.tms.master.LadungRgvorschlag as generatedAlias0 inner join generatedAlias0.ladung as generatedAlias1 inner join generatedAlias1.ladBerechnet as generatedAlias2 left join fetch generatedAlias1.ladBerechnet as generatedAlias3 inner join fetch generatedAlias0.ladung as generatedAlias4 where (generatedAlias0.erledigt is null) and (generatedAlias0.belegart in (:param0, :param1)) and (generatedAlias1.fzadresse in (:param2, :param3)) and (generatedAlias1.zudatum<=:param4) and (1=1) order by generatedAlias0.belegart asc, generatedAlias1.fzadresse asc, generatedAlias1.zudatum asc, generatedAlias1.zulkw asc]
Как я могу сказать JPA/Hibernate, что он должен выбрать все объекты одновременно?
Он работает из-за расширений поставщика в некоторых реализациях (например, Hibernate). В JPA вообще этот запрос JPQL не работает, потому что в этом случае не требуется поддержка цепочки и псевдонимов в соответствии со спецификацией. –
Спасибо за разъяснение Микко. Это довольно неприятно, что такие расширения молча активируются, поэтому вы используете их, не осознавая этого. –
Спасибо. Использование выборки без использования соединения до решения проблемы. Однако я хотел бы поставить предикат на объединенную таблицу. как я могу это сделать? До того, как я использовал следующую конструкцию: Присоединиться