@Transactional — manages transactions. @Version — optimistic locking.
@Transactional:
1@Service2@Transactional3public class UserService {4 public void transferMoney(Long from, Long to, BigDecimal amount) {5 // All in one transaction6 debit(from, amount);7 credit(to, amount);8 }9}
@Version:
1@Entity2public class User {3 @Id4 private Long id;56 @Version7 private Long version;89 private String name;10}
How it works:
Key difference:
Best practice: