我在JPA(Hibernate)获取加入时遇到问题:
这是我的JPQL查询
SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WHERE pr.id=?1
但它不起作用。如何在查询列表中进行过滤?
答案 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)