Pregunta

Con Hibernate, ¿puedes crear una ID compuesta donde una de las columnas que estás asignando a la ID pueda tener valores nulos?

Esto es para tratar con una tabla heredada que tiene una clave única que puede tener valores nulos pero no una clave principal.

Me doy cuenta de que podría simplemente agregar una nueva columna de clave principal a la tabla, pero me pregunto si hay alguna forma de evitarlo.

¿Fue útil?

Solución

No.Las claves primarias no pueden ser nulas.

Otros consejos

Esto no es aconsejable.¿Podrías usar una vista y un mapa en su lugar?Podrías usar COALESCE para proporcionar un valor predeterminado si estás atascado con datos heredados.Tuvimos muchos problemas con las claves compuestas e imagino que los valores nulos causarán aún más problemas.

Para claves compuestas (suponiendo que la base de datos permite valores nulos en las PK), puede tener un número máximo de columnas^2 - 1 entradas que contengan valores nulos (por ejemplo, para una clave compuesta de 2 columnas, puede tener 3 filas que tengan en su clave principal nulos, la cuarta es la PK sin nulos).

¿Por qué querrías hacer eso?Su ID compuesto debe asignar la clave principal de su tabla, y no parece prudente poner valores nulos en una clave, ¿verdad?

EDITAR: Hibernate no permite hacerlo;puede poner la propiedad fuera de la clave y modificar un poco el DAO para tener en cuenta el campo siempre que sea necesario

No obtendrá un error, pero Hibernate no podrá asignar esas filas con valor NULL para la columna compuesta a su Entidad.Eso significa que obtienes una entidad con valores NULL como resultado.

Lamentablemente, no.Tuve que usar una solución alternativa:

Usé Composit Id para una vista (!no tabla) donde las filas se pueden identificar exactamente con 2 columnas (A, B).Aunque una de las columnas (B) puede tener valores nulos así como números enteros positivos.Entonces mi solución es que creé una nueva columna en la vista:"BKey" y mi vista está escrita como si B fuera nula, entonces el valor de BKey es -1; de lo contrario, BKey = B.(Solo aparecen números enteros positivos en B y nulo).También cambié la implementación de mi ID de composición para usar BKey en lugar de B.Espero que ayude a alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top