Ibernazione: Aggiorna, Elimina, Replica e Lavaggio

Vorrei sapere cosa fa esattamente ogni articolo in questa lista, come funziona, quali sono le conseguenze e quando è il momento giusto per l’uso.

  1. ricaricare
  2. Sfrattare
  3. Replicare
  4. rossore

Mi chiedo perfino cosa facciano ciascuno, ma non ne sono assolutamente sicuro, quindi ti chiedo il tuo aiuto, perché voglio davvero capirlo.

So che è una domanda abbastanza generica, ma penso che sia davvero utile sapere tutto.

Grazie.

La documentazione di Hibernate fornisce buoni esempi di questo. Anche questo post sul blog ti darà qualche idea. Aggiungerò qualche riga da lì sotto.

È ansible ricaricare un object e tutte le sue raccolte in qualsiasi momento, usando il metodo refresh() . Ciò è utile quando i trigger del database vengono utilizzati per inizializzare alcune proprietà dell’object.

 sess.save(cat); sess.flush(); //force the SQL INSERT sess.refresh(cat); //re-read the state (after the trigger executes) 

vedere qui per ulteriori esempi.

Ogni volta che si passa un object a save(), update() or saveOrUpdate() , e ogni volta che si recupera un object usando load(), get(), list(), iterate() or scroll() , tale object viene aggiunto a la cache interna della sessione.

Quando viene successivamente chiamato flush() , lo stato di tale object verrà sincronizzato con il database. Se non si desidera che questa sincronizzazione si verifichi, o se si elabora un numero enorme di oggetti e sia necessario gestire la memoria in modo efficiente, è ansible utilizzare il metodo evict() per rimuovere l’object 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 qui .

Leggi l’API della sessione qui .

replicate() è destinato a essere utilizzato al posto di save() / persist() quando è necessario salvare un’ quadro con un determinato identificativo nonostante il fatto che l’identificatore di detta quadro sia configurato per essere generato.

È utile quando alcune quadro (forse provenienti da sistemi esterni) hanno identificatori preesistenti, mentre altre quadro dello stesso tipo hanno bisogno di essere identificate con i loro identificatori.

Tuttavia, a causa di un bug di lunga data in Hibernate ( HHH-1459 , HHH-2716 ) replicate() non funziona come previsto con alcuni tipi di generatori di ID. Questo problema limita l’utilità di replicate() e richiede l’implementazione di spiacevoli soluzioni alternative per emularne il comportamento se la strategia del generatore di id è influenzata e non è ansible modificarla.

  • session.flush() Flushing della sessione forza Hibernate per sincronizzare lo stato in memoria della Session con il database.
  • session.evict() Staccare l’object dalla cache di sessione. Dopo aver scollegato l’object dalla sessione, qualsiasi modifica all’object non verrà mantenuta.
  • session.refresh() Ricarica tutti i dati.
  • session.replicate() dati vengono replicati in diversi Datastore in diverse modalità.