Java 列表/集合上的JPA获取联接筛选器

Java 列表/集合上的JPA获取联接筛选器,java,hibernate,orm,jpa,jpql,Java,Hibernate,Orm,Jpa,Jpql,我在JPA(Hibernate)获取连接上遇到问题: 这是我的JPQL查询 选择n从新闻n左连接获取n.profiles作为pr,其中pr.id=?1 但它不起作用。我如何进行查询以筛选正在获取的列表?根据规范,您尝试执行的操作是不允许的(至少JPA不允许)。根据JPA 1.0规范: 4.4.5.3提取连接 FETCH联接可用于获取数据 作为药物副作用的关联 执行查询。获取连接是 在实体及其子实体上指定 相关实体 获取联接的语法为 fetch_join ::= [ LEFT [OUTER]

我在JPA(Hibernate)获取连接上遇到问题:

这是我的JPQL查询


选择n从新闻n左连接获取n.profiles作为pr,其中pr.id=?1


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

根据规范,您尝试执行的操作是不允许的(至少JPA不允许)。根据JPA 1.0规范:

4.4.5.3提取连接 FETCH联接可用于获取数据 作为药物副作用的关联 执行查询。获取连接是 在实体及其子实体上指定 相关实体

获取联接的语法为

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
但您不能在此处使用获取联接。

请尝试以下方法:

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

你能发布
新闻
课程代码吗?另请参见:;简短总结:-JPA规范不允许使用别名进行连接获取-hibernate不会抱怨,如果使用别名进行连接获取-使用别名进行连接获取,您可以轻松地击中自己的脚