一尘不染

带有左联接获取的JPA namedquery

hibernate

这是我的namedquery:

@NamedQuery(name =“ User.findOneWithLists”,查询=“从用户u中选择u” +“左联接FEACH
u.aTemplates” +“左联接FE.bTemplates” +“左联接FE.bp” +“左JOIN FETCH u.aCredentials“
+” LEFT JOIN FETCH u.st(st.deleted = false)“ +” LEFT JOIN FETCH
u.bCredentials“ +” LEFT JOIN FETCH u.cl“ +” WHERE u.id =:id ”)

我的问题是,应用程序启动时出现错误:

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

在侧面有一个注释

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

知道如何处理where子句吗?


阅读 250

收藏
2020-06-20

共1个答案

一尘不染

检查SQL语法,您不能使用left joinafter
where子句。如果查看的是由SQL生成的名为query的表单,您将看到查询中的联接表where子句在联接之后出现,并应指定相等条件,通过键将这些表链接起来。主表的主键在左侧,而联接表的外键在右侧。联接表由多对一关联的属性指定。

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