在Java中,事务(Transaction)是数据库操作的基本单位,它确保了一组数据库操作要么全部成功,要么全部失败,从而保证了数据的完整性和一致性。事务组(Transaction Group)通常指的是一组相关的事务,它们可能因为某种业务逻辑而被组合在一起。
事务具有四个基本属性,通常被称为ACID属性:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void transfer(int fromId, int toId, double amount) {
User fromUser = userRepository.findById(fromId).orElseThrow(() -> new RuntimeException("User not found"));
User toUser = userRepository.findById(toId).orElseThrow(() -> new RuntimeException("User not found"));
if (fromUser.getBalance() < amount) {
throw new RuntimeException("Insufficient balance");
}
fromUser.setBalance(fromUser.getBalance() - amount);
toUser.setBalance(toUser.getBalance() + amount);
userRepository.save(fromUser);
userRepository.save(toUser);
}
}
在这个示例中,transfer
方法被标记为@Transactional
,这意味着它将在一个事务中执行。如果方法中的任何操作失败,整个事务将回滚,确保数据的一致性。