JPA Fetch Join Filter on List / Set

时间:2010-08-27 15:04:19

标签: java hibernate orm jpa jpql

我在JPA(Hibernate)获取加入时遇到问题:

这是我的JPQL查询

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WHERE pr.id=?1

但它不起作用。如何在查询列表中进行过滤?

2 个答案:

答案 0 :(得分:8)

根据规范,不允许您尝试做的事情(至少不是JPA)。从JPA 1.0规范:

  

4.4.5.3获取联接

     

FETCH JOIN启用获取功能   一个协会作为一个副作用   执行查询。 FETCH JOIN是   指定在实体及其上   相关实体。

     

获取连接的语法是

fetch_join ::= [ LEFT [OUTER] | INNER ] JOIN FETCH join_association_path_expression
     

由...引用的关联   FETCH JOIN子句的右侧   必须是属于的协会   作为结果返回的实体   的查询。 不允许   指定一个标识变量   右边引用的实体   FETCH JOIN子句的一侧,和   因此隐含地引用了   获取的实体无法显示   在查询的其他地方。

所以以下内容应该有效:

SELECT n FROM News n LEFT JOIN n.profiles p WHERE p.id = ?1

但你不能在这里使用FETCH JOIN。

答案 1 :(得分:-1)

尝试这种方式:

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1)