如何使用可用的外键输入处理JPA JOIN但是没有可用的外来输入?

时间:2009-12-03 17:45:17

标签: java jpa join null foreign-key-relationship

我想知道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)

非常感谢!

1 个答案:

答案 0 :(得分:1)

根据定义,表A中的第3行是非法的;如果没有B且ID = 11,则表A中没有该行,因为您违反了外键约束。

至于从A获取B为空的所有行,您的第一个查询应该有效。您也可以尝试:

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

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