Hibernate genera un'eccezione di violazione di vincolo unico campo, mentre l'aggiornamento parte della chiave unica
-
29-09-2019 - |
Domanda
Di seguito è riportato il caso d'uso: Ho un indice univoco definito su 3 colonne dire A, B, C. Assumere i valori in esse sono A1, B1, C1. Il mio codice Java è l'aggiunta di un nuovo record dire A1, B1, C1 ma prima che si aggiunge questo record, aggiorno il valore precedente da C1 a C2. Durante il tentativo di aggiungere il nuovo record (dopo l'aggiornamento), Hibernate sta gettando un'eccezione di violazione di vincolo univoco. Qual è il motivo del perché lo fa? Tutte le dichiarazioni di cui sopra vengono eseguite all'interno della stessa transazione. La mia ipotesi è dell'inserto avviene prima dell'aggiornamento e quindi la ragione per l'eccezione.
Qualche idea / suggerimento?
Soluzione
Prova ad utilizzare session.flush () dopo l'aggiornamento.
Altri suggerimenti
Il mio codice Java è l'aggiunta di un nuovo record dire A1, B1, C1 ma prima che si aggiunge questo record, aggiorno il valore precedente da C1 a C2. Durante il tentativo di aggiungere il nuovo record (dopo l'aggiornamento), Hibernate sta gettando un'eccezione di violazione di vincolo univoco. Qual è il motivo del perché lo fa? Tutte le dichiarazioni di cui sopra vengono eseguite all'interno della stessa transazione.
Ecco come Hibernate si comporta da parte di progettazione, sarà inserire i valori al momento save()
(A1, B1, C1) e poi aggiornarli (da C1 a C2), non sarà inserto A1, B1, C2). Citando il Re in di inserimento e aggiornamento nel medesimo filo :
comportamento Hibernate previsto (abbiamo discusso se questo è davvero corretto o meno!) È che l'istruzione INSERT inserirà esattamente i dati che è stato impostato quando save () è stato chiamato. Questo dà all'utente un più sottile po 'granulare di controllo, soprattutto in un contesto in cui ci sono i trigger, ecc Tuttavia, se non si sta attenti, potrebbe eseguire male.
Suggerimento:. Ritardare il salvataggio di inserto (A1, B1, C2) direttamente