java / expert
Snippet
Optimistisches Locking mit JPA @Version für Nebenläufigkeit
Optimistisches Locking verhindert 'Lost Updates' in nebenläufigen Umgebungen. Das @Version-Feld wird von Hibernate bei Updates automatisch geprüft; falls sich die Version in der Datenbank geändert hat, wird eine ObjectOptimisticLockingFailureException ausgelöst.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entitypublic class Account {@Idprivate Long id;private BigDecimal balance;@Versionprivate Long version;public void withdraw(BigDecimal amount) {if (balance.compareTo(amount) < 0) throw new InsufficientFundsException();this.balance = this.balance.subtract(amount);}}
spring
Erklärung
1
@Version
Spezifiziert das Versions-Feld, das für die Erkennung von optimistischem Locking verwendet wird.
2
private Long version;
JPA nutzt dieses numerische Feld, um Entity-Änderungen über Transaktionen hinweg zu verfolgen.