我在 JPA (Hibernate) Fetch Join 上遇到问题:
这是我的 JPQL 查询
SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WHERE pr.id=?1
但它不起作用。如何进行查询以过滤正在获取的列表?
根据规范,不允许您尝试做的事情(至少 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。
试试这个方法:
SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1)