Sto scrivendo una piccola app per l'asta ed è molto importante che le mie offerte vengano registrate con certezza. Dopotutto, gli ultimi due secondi dell'asta sono momenti critici per gli acquirenti, e non posso rischiare che si presentino simultaneamente e presentino una condizione di gara.Livelli di isolamento delle transazioni variabili su richiesta
E naturalmente, questo è l'isolamento delle transazioni. Posso impostare il mio livello di isolamento su serializzabile e siamo pronti.
Ma per quanto riguarda tutte le altre richieste? Se le persone stanno visualizzando i profili o inviando messaggi, queste richieste non sono necessarie in alcun modo vicino a questo tipo di isolamento della transazione. Un livello di isolamento impegnato in lettura è perfettamente accettabile per tali richieste.
Sto impostando il mio livello di transazione come parte della mia proprietà di ibernazione hibernate.connection.isolation
, ma mi piacerebbe davvero essere in grado di fare qualcosa come session.setTransactionIsolation(newIsolation)
per richiesta.
Molto prudente con Serializable come livello di isolamento predefinito, poiché dovrai affrontare query row e table chiusura con serrature morte. Nella mia esperienza, i maggiori problemi con l'isolamento restrittivo riguarderanno il modello dei dati, il modo in cui l'ORM gestisce i recuperi e il modo in cui l'app apre e chiude le transazioni. – stringy05
Le sezioni critiche dell'app (in particolare, le offerte) devono essere eseguite con atomicy e in modo serializzabile. Assolutamente no: non posso permettere a due persone di fare offerte sullo stesso articolo allo stesso prezzo, una di queste deve essere rifiutata. – corsiKa
org.hibernate.Session session = (Session) entityManager.getDelegate(); Connessione connessione = session.connection(); connection.setTransactionIsolation (Connection.READ_UNCOMMITTED); ottenuto da http://stackoverflow.com/questions/2924147/jpa-and-mysql-transaction-isolation-level – StanislavL