¿Cómo maneja la APP se une a disposición de entrada clave externa, pero no la entrada extranjera disponible?
-
12-09-2019 - |
Pregunta
Me pregunto cómo JPA define para manejar escenario siguiente:
Table A: | Table B:
ID FK_B | ID
1 10 | 10
2 null | 12
3 11 |
Quiero todas las entradas de la tabla A con FK_B NULL o referencia entrada de la Tabla B no está disponible.
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;
}
¿Se ha definido, lo que sucede si uso
SELECT a FROM A a LEFT JOIN a.b WHERE a.b IS NULL
o: (¿Es esto posible)
SELECT a FROM A a LEFT JOIN B b on (b = a.b) WHERE b IS NULL
Lo que necesito es una lista que contiene
A(id = 2)
A(id = 3)
Muchas gracias!
Solución
Fila # 3 en el cuadro A es ilegal por definición; si no hay B
con ID = 11 no se puede tener esa fila en la mesa para A
que estaría violando la restricción de clave externa.
En cuanto a conseguir todas las filas de A
donde B
es nulo, su primera consulta debe trabajar. También puede probar:
SELECT a FROM A a WHERE a.b.id IS NULL
aunque no estoy 100% seguro de si esa es la sintaxis JPA QL válida (que funciona para Hibernate)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow