Hibernate - StaleObjectStateException nella query possibile?
-
23-09-2019 - |
Domanda
E 'possibile ottenere un StaleObjectStateException
con Hibernate quando si esegue la stessa query due volte all'interno di uno tx se i dati dei risultati di tale ricerca viene cambiato da un aggiornamento simultaneo all'interno di una sessione diversa tra la prima e la seconda query?
Sto usando controllo della concorrenza ottimistica su tutte le entità in questo scenario.
Quindi sembra che questo.
Thread-1: Transaction inizia
Discussione-1: interrogazione Viene eseguito e recupera ordine cioè con chiave = 4711
Discussione-2: stesso ordine con il tasto 4711 viene recuperata, è cambiato e si è impegnato nel secondo thread
Discussione-1: interrogazione viene eseguito di nuovo e dovrebbe restituire l'ordine con il tasto = 4711
Riceverò una StaleObjectStateException
nella Discussione-1 nella seconda query?
Grazie per il vostro aiuto!
Thomas
Soluzione
. Disclaimer: io non l'ho provato, questo è ciò che è aspettarsi da quello che so di Hibernate
Avrete non ottenere un StaleObjectStateException
durante l'esecuzione della seconda query né quando la transazione dal filo-1 si impegna.
Tuttavia, se se la order
è stato modificato prima di eseguire la seconda query, il order
otterrà (modalità auto-flush assumendo e lettura-scrittura delle transazioni) arrossato poco prima della seconda query viene eseguito e questo innescherà una StaleObjectStateException
.
Altri suggerimenti
Non penso così. La seconda query nella Discussione-1 non ha nemmeno colpito il database, si otterrà l'oggetto (stantio) dalla cache di 1 ° livello (la sessione). Ma se si cambia l'ordine dopo la seconda query, si otterrà l'eccezione quando si lava la sessione.