如何处理具有可用外键条目但不可用外键条目的 JPA JOIN?

发布于 2024-08-13 13:04:45 字数 713 浏览 4 评论 0原文

我想知道 JPA 如何定义来处理以下情况:

Table A: | Table B:
ID  FK_B | ID
1   10   | 10
2   null | 12
3   11   |

我希望所有表 A 条目的 FK_B 为 NULL 或引用不可用的表 B 条目。

public class A implements Serializable {
    @Id
    private Long id;

    @JoinColumn(name = "FK_B", nullable = true)
    @ManyToOne
    private B b;
}

public class B implements Serializable {

    @Id
    private Long id;
}

它是否已定义,如果我使用

SELECT a FROM A a LEFT JOIN a.b WHERE a.b IS NULL

或会发生什么:(这可能吗?)

SELECT a FROM A a LEFT JOIN B b on (b = a.b) WHERE b IS NULL

我需要的是一个包含

A(id = 2)
A(id = 3)

非常感谢!

I wonder how JPA defines to handle following scenario:

Table A: | Table B:
ID  FK_B | ID
1   10   | 10
2   null | 12
3   11   |

I want all Table A entries with FK_B NULL or referencing not available Table B entry.

public class A implements Serializable {
    @Id
    private Long id;

    @JoinColumn(name = "FK_B", nullable = true)
    @ManyToOne
    private B b;
}

public class B implements Serializable {

    @Id
    private Long id;
}

Is it defined, what happens if I use

SELECT a FROM A a LEFT JOIN a.b WHERE a.b IS NULL

or: (Is this possible?)

SELECT a FROM A a LEFT JOIN B b on (b = a.b) WHERE b IS NULL

What I need is a list containing

A(id = 2)
A(id = 3)

Thanks a lot!

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

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

发布评论

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

评论(1

孤蝉 2024-08-20 13:04:46

根据定义,表 A 中的第 3 行是非法的;如果没有 ID=11 的 B ,则表 A 中不能包含该行,因为这会违反外键约束。

至于从 A 获取所有行(其中 B 为 null),您的第一个查询应该可以工作。您也可以尝试:

SELECT a FROM A a WHERE a.b.id IS NULL

虽然我不能 100% 确定这是否是有效的 JPA QL 语法(它适用于 Hibernate)

Row #3 in your Table A is illegal by definition; if there's no B with ID=11 you can't have that row in table A for you'd be violating the foreign key constraint.

As far as getting all rows from A where B is null, your first query should work. You can also try:

SELECT a FROM A a WHERE a.b.id IS NULL

although I'm not 100% sure whether that's valid JPA QL syntax (it works for Hibernate)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文