Jak działa @Version
adnotacja w JPA?
Znalazłem różne odpowiedzi, których wyciąg jest następujący:
JPA używa pola wersji w jednostkach, aby wykrywać współbieżne modyfikacje tego samego rekordu magazynu danych. Gdy środowisko wykonawcze JPA wykryje próbę równoczesnej modyfikacji tego samego rekordu, zgłasza wyjątek od transakcji, która próbuje zatwierdzić jako ostatnia.
Ale nadal nie jestem pewien, jak to działa.
Również z następujących linii:
Należy rozważyć niezmienność pól wersji. Zmiana wartości pola ma niezdefiniowane wyniki.
Czy to oznacza, że powinniśmy zadeklarować nasze pole wersji jako final
?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
. Jeśli ktoś zaktualizował rekord,old.version
nie będzie już pasował do tego w bazie danych, a klauzula where uniemożliwi aktualizację. Będą to „zaktualizowane wiersze”0
, które JPA może wykryć, aby stwierdzić, że nastąpiła równoległa modyfikacja.