JPA 在列表/集合上获取连接过滤器

发布于 2024-09-16 22:49:05 字数 190 浏览 3 评论 0原文

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

这是我的 JPQL 查询

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

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

I'm having problem on JPA (Hibernate) Fetch Join :

Here is my JPQL query


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

But it's not working. How can I make a query that filters on the list that is being fetched ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱桃奶球 2024-09-23 22:49:05

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

4.4.5.3 获取连接

FETCH JOIN 可以获取
作为副作用的关联
执行查询。 FETCH JOIN 是
指定实体及其
相关实体。

获取连接的语法是

fetch_join ::= [ 左[外部] | 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。

According to the specification, what you're trying to do is not allowed (at least not by JPA). From the JPA 1.0 specification:

4.4.5.3 Fetch Joins

A FETCH JOIN enables the fetching of
an association as a side effect of the
execution of a query. A FETCH JOIN is
specified over an entity and its
related entities.

The syntax for a fetch join is

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

The association referenced by the
right side of the FETCH JOIN clause
must be an association that belongs to
an entity that is returned as a result
of the query. It is not permitted to
specify an identification variable for
the entities referenced by the right
side of the FETCH JOIN clause, and
hence references to the implicitly
fetched entities cannot appear
elsewhere in the query.

So the following should work:

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

But you can't use a FETCH JOIN here.

旧梦荧光笔 2024-09-23 22:49:05

试试这个方法:

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

Try this way:

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文