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