Sembra che tu abbia configurato Hibernate per usare controllo ottimistico della concorrenza . Ciò significa che la tua tabella Utente ha un campo versione che Hibernate incrementa ad ogni aggiornamento di riga.
Molto probabilmente la tua transazione inizia all'inizio della richiesta HTTP e termina alla fine della risposta HTTP. Ciò significa che il processo di modifica di un utente consiste in due transazioni:una transazione per popolare il modulo web e una transazione per salvare le modifiche.
In tal caso, la modifica del livello di isolamento del database non servirà a nulla. Molto probabilmente tutto ciò che otterrai è prestazioni e scalabilità peggiori .
Non è una brutta cosa avere StaleObjectException
S. Riflette il mondo reale:le persone effettivamente lavorano sulla stessa cosa di tanto in tanto e possono verificarsi conflitti. La domanda è:quando viene rilevato un conflitto, come lo si risolve in modo soddisfacente per gli utenti finali? Può essere risolto senza l'assistenza dell'utente?
Possibili strategie potrebbero essere
-
sovrascrivi le modifiche dell'utente precedente (spesso non quelle che desideri, da qui la necessità del controllo della concorrenza),
-
mostra un messaggio di errore che chiede all'utente di aggiornare ed eseguire nuovamente le modifiche,
-
unire automaticamente le modifiche senza sovrascrivere le modifiche dell'utente precedente (a volte possibile)
-
informare l'utente della obsolescenza dei suoi dati e offrirgli un modo per unire manualmente le sue modifiche
Tutto dipende dal contesto.