Mi stavo chiedendo se qualcuno potesse dirmi che cosa è una sessione sporca di letargo? Mi sembra di avere un problema in cui una query di criteri sta eseguendo un inserimento quando non dovrebbe. Credo che sia legato a una sessione sporca, ma senza sapere veramente cos'è una sessione sporca, non sono in grado di risolvere il mio problema. Inoltre, come si crea una sessione sporca. Grazie.Che cos'è una sessione di Hibernate dirty?
risposta
La sessione Hibernate è una cache. Memorizza nella cache le entità lette dal database e memorizza nella cache anche le modifiche apportate alle entità che contiene, nonché le entità aggiunte e rimosse, fino a quando la sessione viene svuotata (cioè tutte le modifiche in sospeso vengono scritte nel database).
Una sessione è detta sporca quando alcune modifiche non sono ancora state scaricate. Ed è quindi perfettamente normale avere una sessione sporca. La sessione viene svuotata prima del commit della transazione.
Significa solo che sono state apportate modifiche a oggetti in memoria, gestiti, persistenti, che non sono ancora stati scaricati nel database.
Fondamentalmente l'idea alla base dell'ibernazione è che lo stato degli oggetti persistenti in memoria è lo stato dell'applicazione. Se apporti una modifica a un oggetto gestito, Hibernate lo inserirà nel database alla prossima opportunità. Non dovresti apportare modifiche "temporanee" agli oggetti gestiti che non intendi diventare persistenti, perché lo saranno!
Prima di eseguire una query, la modalità ibernazione scarica lo stato in memoria di tutti gli oggetti gestiti nel database, in modo che la query sia accurata rispetto allo stato dell'applicazione.
In realtà, è più complicato di così: Hibernate svuota solo se le modifiche in sospeso potrebbero avere un impatto sulla query eseguita. –
Esiste un metodo consigliato per impedire alla query di eseguire un inserimento prima che gli dica di inserire l'oggetto? Ho usato setFetchMode per il manuale che ha funzionato, tuttavia ritengo che questa potrebbe essere solo una correzione dell'aiuto di banda piuttosto che una correzione di root. –
Il FlushMode può essere modificato per l'intera applicazione su SessionFactory, probabilmente su COMMIT, non su MANUAL, se non si desidera che effettui inserimenti e aggiornamenti prima della fine della transazione. Questa è la soluzione, tuttavia, se si apportano modifiche alle entità gestite che non si desidera scrivere nel database, non solo un bandaid. – Affe
Una sessione dirty in Hibernate è quando si carica un oggetto all'interno della sessione e quindi lo si modifica.
Oppure, quando si apre una sessione e si crea un nuovo oggetto.
Anche se non esplicitamente dichiara chiamare qualsiasi operazione di inserimento/aggiornamento, Hibernate segna la sessione come sporco e salva le modifiche quando la sessione viene chiusa
In parole semplici: come sappiamo, i dati sporchi sono quelli che non sono stati ancora impegnati. Allo stesso modo, la sessione dirty in hibernate contiene dati modificati che non sono stati ancora impegnati.
- 1. Impedire la sessione di sospensione dallo svuotamento/archiviazione di entità dirty non valide
- 2. Che cos'è una sessione di database?
- 3. Hibernate, Java: nessuna sessione o sessione è stata chiusa
- 4. hibernate gestione sessione con caricamento lazy
- 5. Come impostare lo stato dirty di Ext.Form?
- 6. Hibernate HQL colpisce solo la cache di sessione
- 7. Hibernate: Impossibile sincronizzare lo stato di database con sessione
- 8. che memorizzano la password in una sessione
- 9. Come interrompere una sessione di sospensione?
- 10. In che modo PHP rileva che una sessione è scaduta?
- 11. come fa hibernate sessionfactory a gestire la sessione?
- 12. Modifica tabelle con ASP.Net - Quick 'n Dirty
- 13. Eclipse/Git - Pull Failed Dirty Worktree
- 14. Hibernate ThreadLocale Gestione della sessione compatibile con ForkJoinPool?
- 15. Ignora stato submodule dirty su commit
- 16. Convalida forzata ng-dirty in formato angularjs
- 17. @PreUpdate e @PrePersist in Hibernate/JPA (tramite sessione)
- 18. $ dirty vs $ invalid: Qual è la differenza?
- 19. Come dire che colorscheme una sessione di Vim utilizza attualmente
- 20. Che cosa significa "Sei nel mezzo di una sessione am"?
- 21. Hibernate + Swing
- 22. Impedisci l'input dal modulo di impostazione $ dirty angularjs
- 23. Che tipo di difficoltà hai dovuto affrontare con Hibernate
- 24. Spring @Transactional (Propagation.NEVER) dovrebbe creare una sessione di sospensione?
- 25. Jquery - Più di 1 "$ (documento) .ready" = codice dirty?
- 26. Come prevenire una sessione
- 27. utente Impedire dalle pagine vedendo che richiedono una sessione
- 28. Modifica scadenza sessione sessione e timeout sessione per una sessione CakePHP
- 29. Creazione di una sessione di accesso interattiva
- 30. Sostituzione di una sessione di meteoriti?
se non voglio che la query inneschi un flush, dovrei impostare la query di criteri setFlushMode su manual, o dovresti conciderla come un cerotto risolvere? –
@George se non si desidera salvare le modifiche apportate agli oggetti, provare a eseguire tali modifiche al di fuori della sessione – richarbernal
Immagino che dovrò cercare alcune informazioni aggiuntive su come archiviare i miei dati al di fuori della sessione. Sono ancora abbastanza nuovo da ibernare, quindi non sono del tutto sicuro di come inizi con la sessione. –