2

我在 JPA (Hibernate) Fetch Join 上遇到问题:

这是我的 JPQL 查询

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

但它不起作用。如何进行查询以过滤正在获取的列表?

4

2 回答 2

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。

于 2010-08-27T22:07:45.840 回答
-1

试试这个方法:

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1) 
于 2012-11-01T04:01:29.060 回答