2015-06-20 7 views
6

In caso di Hibernate, faccio le seguenti fasi:Se modifico un'entità Hibernate, dopo aver fatto un salvataggio, quando commetto sarebbero le modifiche salvate nel database

  1. aprire una sessione.
  2. Creare un nuovo oggetto POJO di ibernazione (che deve essere salvato) e immettere i valori.
  3. Ora faccio session.save().
  4. Ora cambio l'oggetto POJO - diciamo che è un oggetto dipendente e faccio emp.setName ("Altro nome") i.e cambia il nome del dipendente nell'oggetto.
  5. Ora eseguo un commit di transazione.

La mia domanda è ciò che verrebbe salvato nel database: il nome precedente a session.save() o il nome dopo la modifica "Altro nome"?

+1

Perché non provarlo –

risposta

9

Il moment you saved the entity, diventa gestito e tutte le ulteriori modifiche vengono propagate al database durante Session flushing.

Quando si è salvata l'entità, è stato attivato un numero EntityInsertAction da accodare. Dopo aver modificato l'entità, lo stato attuale dell'entità è stato modificato in modo tale che durante un flush, Hibernate inserirà semplicemente lo stato dell'entità più recente, quindi il database conterrà lo "Other Name".

In effetti, chiamare un metodo come save per un'entità gestita (che attiva un'entità merge) influirà sulle prestazioni. Controlla this post for more details.

1

Tutto ciò che si sta facendo nella sessione è impegnato nel database, una volta effettuato il commit della transazione. Anche quando svuoti la sessione stai semplicemente aggiungendo le modifiche sul tavolo alla memoria, ma non esegui il commit del database.

Quindi, una volta che Hibernate rileva che la sessione è sporca, impegna la modifica, nel caso in cui si abbia il controllo automatico dello sporco nella configurazione, e sarà abbastanza intelligente da vedere l'ultima modifica nella sessione dell'oggetto. Quindi si avrà "Altro nome"

1

Mentre si lavora con l'entità gestita, quando non si chiama save, verrà salvato automaticamente.