划分服务或JPARepositories中的事务

时间:2018-06-06 18:03:12

标签: java spring jpa

根据this jpa存储库实例是事务性的,但在其他参考书目中说应该在服务层声明事务。什么是更好的方法?

1 个答案:

答案 0 :(得分:1)

虽然以事务方式执行单个JPA存储库方法,但通常需要执行包括各种JPA存储库方法调用的事务。

考虑将金额从一个帐户转移到另一个帐户的经典方法。如果在传输过程中的任何阶段发生错误,则必须回滚。因此,整个(服务)方法是@Transactional

@Transactional
public void transfer(Account a, Account b, int amount) {
    a.reduce(amount);
    b.add(amount),
    accountRepository.save(a);
    accountRepository.save(b);
}

此处,即使保存帐户b的错误也不会改变帐户a的持久状态,因为transfer方法中的所有内容都会回滚。

要在Spring中启用事务管理,请在Java @EnableTransactionManagement类上使用@Configuration,或在XML配置时使用<tx:annotation-driven/>