Domanda

Con Hibernate, puoi creare un ID composito in cui una delle colonne che stai mappando sull'ID può avere valori null?

Si tratta di gestire una tabella legacy che ha una chiave univoca che può avere valori null ma nessuna chiave primaria.

Mi rendo conto che potrei semplicemente aggiungere una nuova colonna di chiave primaria alla tabella, ma mi chiedo se esiste un modo per evitare di farlo.

È stato utile?

Soluzione

NO.Le chiavi primarie non possono essere nulle.

Altri suggerimenti

Questo non è consigliabile.Potresti usare una vista e mapparla invece?Potresti utilizzare COALESCE per fornire un valore predefinito se sei bloccato con dati legacy.Abbiamo avuto molti problemi con le chiavi composite e immagino che i valori null causeranno ancora più problemi.

Per le chiavi composte (supponendo che il database consenta valori null nei PK) puoi avere un massimo di number_of_cols^2 - 1 voci contenenti null, (ad esempio per una chiave composita di 2 colonne puoi avere 3 righe aventi nella chiave primaria null, la quarta è la PK senza null).

Perché vorresti farlo?Il tuo ID composito dovrebbe mappare la chiave primaria della tua tabella e non sembra saggio inserire valori nulli in una chiave, vero?

MODIFICARE: L'ibernazione non lo consente;potresti mettere la proprietà fuori dalla chiave e modificare leggermente il DAO per tenere conto del campo ove necessario

Non riceverai un errore ma Hibernate non sarà in grado di mappare quelle righe con valore NULL per la colonna composita alla tua Entità.Ciò significa che ottieni un'entità con valori NULL nel risultato.

Sfortunatamente no.O ho dovuto usare una soluzione alternativa:

Ho usato l'ID composito per una vista(!non tabella) dove le righe possono essere identificate esattamente da 2 colonne (A, B).Sebbene una delle colonne (B) possa avere valori nulli e numeri interi positivi.Quindi la mia soluzione alternativa è che ho creato una nuova colonna nella vista:"BKey" e la mia opinione è scritta come se B fosse null, quindi il valore di BKey è -1 altrimenti BKey = B.(Solo numeri interi positivi si verificano in B e null).Ho anche modificato l'implementazione dell'ID composito per utilizzare BKey anziché B.Spero che aiuti per qualcuno..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top