Il Hibernate Documentation fornisce buoni esempi di questo. Anche questo blog post ti darà qualche idea. Aggiungerò qualche riga da lì sotto.
È possibile ricaricare un oggetto e tutte le sue raccolte in qualsiasi momento, utilizzando il metodo refresh()
. Ciò è utile quando i trigger del database vengono utilizzati per inizializzare alcune proprietà dell'oggetto.
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
vedere here per ulteriori esempi.
Ogni volta che si passa un oggetto a save(), update() or saveOrUpdate()
, e ogni volta che si recupera un oggetto utilizzando load(), get(), list(), iterate() or scroll()
, quell'oggetto viene aggiunto alla cache interna della sessione.
Quando viene successivamente chiamato flush()
, lo stato di tale oggetto verrà sincronizzato con il database. Se non si desidera che questa sincronizzazione si verifichi o se si elabori un numero enorme di oggetti e sia necessario gestire la memoria in modo efficiente, è possibile utilizzare il metodo evict()
per rimuovere l'oggetto e le relative raccolte dalla cache di primo livello.
ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set
while (cats.next()) {
Cat cat = (Cat) cats.get(0);
doSomethingWithACat(cat);
sess.evict(cat); // (if gives the compile time error then use it: sess.evict(cat.getClass());
}
Leggi l'esempio completo da here.
Ulteriori informazioni sull'API di sessione here.
Sto provando a chiamare sessionFectory.evict (cat) ma mi dà errore di compilazione - argomento non applicabile. –
@KevalTrivedi Considera la possibilità di pubblicare una nuova domanda con tutte le informazioni pertinenti come il tuo codice di esempio e i tuoi registri. – ManuPK