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`

这不受支持,因为您无法进行部分提取。