Tôi có nhiều thực thể được truy vấn thông qua Truy vấn Tiêu chí JPA2.Cách lấy tất cả dữ liệu trong một truy vấn
tôi có thể tham gia hai trong số các tổ chức và nhận được kết quả ngay lập tức:
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);
Sau đó, tôi cố gắng để tham gia vào một bảng bổ sung như thế:
ladung.join("ladBerechnet");
ladung.fetch("ladBerechnet", JoinType.LEFT);
tôi nhận được lỗi sau :
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]
Làm cách nào tôi có thể cho JPA/Hibernate biết rằng bạn nên chọn tất cả các thực thể cùng một lúc?
Nó hoạt động vì các tiện ích mở rộng của nhà cung cấp trong một số triển khai (ví dụ như Hibernate chẳng hạn). Trong JPA nói chung truy vấn JPQL này không hoạt động, bởi vì một chuỗi và bí danh như vậy trong trường hợp này không bắt buộc phải được hỗ trợ theo đặc tả. –
Cảm ơn Mikko đã làm rõ. Đó là khá khó chịu mà phần mở rộng như vậy được kích hoạt âm thầm, vì vậy bạn sử dụng chúng mà không thực sự nhận ra nó. –
Cảm ơn cho đến nay. Sử dụng tìm nạp mà không cần sử dụng phép nối trước khi giải quyết vấn đề. Tuy nhiên, tôi muốn đặt một vị từ trên bảng đã nối. làm thế nào tôi có thể làm điều đó? Trước khi tôi sử dụng cấu trúc sau: Tham gia