Zdá se, že jste nakonfigurovali režim spánku tak, aby používal optimistické řízení souběžnosti . To znamená, že vaše tabulka uživatelů obsahuje pole verze, které se při každé aktualizaci řádku zvýší v režimu spánku.
Vaše transakce s největší pravděpodobností začíná na začátku požadavku HTTP a končí na konci odpovědi HTTP. To znamená, že proces úpravy uživatele se skládá ze dvou transakcí:jedné transakce k vyplnění webového formuláře a jedné transakce k uložení změn.
V takovém případě změna úrovně izolace databáze nepřinese nic dobrého. S největší pravděpodobností vše, co získáte, je horší výkon a škálovatelnost .
Není špatné mít StaleObjectException
s. Odráží skutečný svět – lidé skutečně jednou za čas pracují na stejné věci a může dojít ke konfliktům. Otázkou je, když byl zjištěn konflikt, jak jej vyřešíte způsobem, který uspokojí koncové uživatele? Lze to vyřešit bez asistence uživatele?
Možné strategie by mohly být
-
přepsat změny předchozího uživatele (často ne to, co chcete – proto je potřeba kontroly souběžnosti),
-
zobrazit chybovou zprávu s žádostí o aktualizaci a opětovné provedení změn
-
automaticky sloučit změny bez přepsání změn předchozího uživatele (někdy je to možné)
-
informovat uživatele o zastaralosti jeho dat a nabídnout mu způsob, jak ručně sloučit své změny
Vše závisí na kontextu.