簡體   English   中英

Jpa namedquery with left join fetch

[英]Jpa namedquery with left join fetch

這是我的命名查詢:

@NamedQuery(name =“User.findOneWithLists”,query =“SELECT u FROM User u”+“LEFT JOIN FETCH u.aTemplates”+“LEFT JOIN FETCH u.bTemplates”+“LEFT JOIN FETCH u.bp”+“LEFT JOIN FETCH u.aCredentials“+”LEFT JOIN FETCH u.st WHERE(st.deleted = false)“+”LEFT JOIN FETCH u.bCredentials“+”LEFT JOIN FETCH u.cl“+”WHERE u.id =:id “)

我的問題是,當應用程序啟動時出現錯誤:

org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:LEFT ....

在st側有一個注釋

@ManyToOne
 @JoinColumn(name = "st_user")
 private User user;

任何想法如何處理這個where子句?

檢查一個SQL語法,你不能在where子句之后使用left join 如果您正在查看命名查詢的SQL生成表單,您將看到查詢中連接表的where子句在連接之后出現,並且應指定通過鍵鏈接這些表的相等條件。 左側主表的主鍵和右側連接表的外鍵。 連接表由多對一關聯的屬性指定。

@NamedQuery(
    name = "findOneWithLists",
    query = "from Table t left join User u where u.id= :id"
)

對於連接條件,Hibernate提供with關鍵字,甚至在JPA 2.1之前。

因此,查詢的相關部分將如下所示:

SELECT u FROM User u  ... LEFT JOIN u.st WITH st.deleted = false

我不確定LEFT JOIN FETCH u.cl with u.id= :id但是如果我沒記錯的話,那就不那么容易了,可能需要通過改編的join和u.ui = :id在where條件下解決。

LEFT JOIN FETCH u.st WITH st.deleted = false`

這不受支持,因為您無法進行部分提取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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