Hibernate genera un'eccezione di violazione di vincolo unico campo, mentre l'aggiornamento parte della chiave unica

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

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?

È stato utile?

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

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