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`
这不受支持,因为您无法进行部分提取。
- spring-nullpointerexception-无法在无注释类中访问自动连接的带注释的服务(或dao)
- Spring Data JPA – 注入失败 – BeanCreationException:无法自动assembly字段
- JSF如何找到使用@ManagedBean注释的bean?
- 自定义注释JSF
- @OneToOne(可选= false)和@JoinColumn(nullable = false)一起使用
- Java EE 6和Singletons
- Hibernate / JPA注释 – 未知实体
- yammer @Timed将值保持为零
- JSF 2使用@ManagedProperty注入Spring bean / service而没有xml