我想知道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)
非常感谢!
答案 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)