簡體   English   中英

使用條件構建器忽略了JPA Hibernate生成的左聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM