2014-04-25 7 views
9

Stuck on the same problem Esiste un metodo per ignorare i valori null durante l'aggiornamento del database in Hibernate?Ignora valori Null quando si aggiorna il database in Hibernate

Ogni volta che si chiama update(); di Session, aggiornerà anche i valori nulli trovati nell'oggetto.

Esempio:

User user = new User(); 
user.setUserId(5); 
user.setUserName("Maarten"); 
user.setUserFirstName(null); // but in database this value is not null 

session.update(user); 

O

session.saveOrUpdate(user); 

Il DB verrà ora aggiornare l'utente, ma imposterà il cognome utente Null (perché è nullo nell'oggetto).

C'è qualche modo o metodo in Hibernate per evitare questo (non voglio lanciare una query di selezione/aggiornamento per impostare il bean)? che ignorerà il valore nullo?

+1

possibile duplicato di [Come posso evitare che Hibernate di aggiornare i valori NULL] (http://stackoverflow.com/questions/7517546/how-can- i-prevent-hibernate-from-updating-null-values) –

+0

quindi si desidera impostare il valore FirstName come valore che è presente nel DB in precedenza. Non si desidera aggiornare tale FirstName Right? – Gundamaiah

+0

@ Ganesh hai ragione. – Vishrant

risposta

0

Dipende dal livello di astrazione che si desidera controllare, e le regole di business dell'oggetto:

  • è il campo davvero annullabile, o stai semplicemente usando come DTO? forse hai bisogno di un oggetto intermedio per controllare i valori nulli
  • Cosa succede ai nuovi utenti (come nell'esempio)? Dovrei ignorare il valore nullo, quindi quale valore deve essere mantenuto, quello predefinito?

Se, comunque, si definiscono i requisiti in un livello inferiore, ad es. "Non includono i valori nulli nella query di aggiornamento", è possibile utilizzare il seguente:

  • sql-aggiornamento di annotazione here. È possibile utilizzare una query SQL personalizzata o di una procedura per controllare i valori
  • DynamicUpdate è di circa i cambiamenti e non con quelli, quindi penso che non è proprio adatto
  • Utilizzare un EntityListener, e un campo transitorio ausiliario per annullare le modifiche se lo si desidera.
  • Altre opzioni: utilizzare un interceptor o addirittura creare un custom dialect
Problemi correlati