¿Cómo maneja la APP se une a disposición de entrada clave externa, pero no la entrada extranjera disponible?

StackOverflow https://stackoverflow.com/questions/1841632

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!

¿Fue útil?

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
scroll top