0 Tage Serie
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
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
public class Account {
@Id
private Long id;
private BigDecimal balance;
@Version
private 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.