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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top