[英]JPA Hibernate Generated Left Join ignored using criteria builder
我有一個與另一個實體(可用性)和其他實體具有@ManyToOne關系的實體(人)。 當我獲得人員時,我沒有可用性為Null的人員,因為Hibernate進行內部聯接(如果我渴望獲取),或者沒有Select(如果是惰性獲取)。 同時,我嘗試從結果中創建另一個bean,因此我使用:
query.select(builder.construct(MyPerson.class,root.get("availability").get("date").....)
This will generate
select a.date, ... from Person p, Availability a Where p.availId = a.id.
As I need a Left join, I have added to my code :
Join<Availability, person> avail = root.join("availability", JoinType.LEFT);
奇怪,它將生成一個LEFT OUTER join
但仍使用舊請求
select **a2**.date, ...
from Person p,
LEFT OUTER JOIN Availability a1 on a1.id = p.availId
,**Availability a2**
**Where p.availId = a2.id.**
怎么了 當它僅生成Left Join時,唯一的情況是用根構造新bean。 (帶有延遲加載),但它將生成太多其他查詢。
query.select(builder.construct(MyPerson.class,root)
最后,找到解決方案 。 實際上,我不需要使用Join avail = root.join(“ availability”,JoinType.LEFT);
因此,我已將其刪除,並在創建新bean時執行了以下操作:query.select(builder.construct(MyPerson.class,root.join(“ availability”,JoinType.LEFT).get(“ date”))
現在我只有一個使用LEFT OUTER JOIN生成的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.