繁体   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