如果一个类被标记为@Transactional,这是否意味着样板文件:
Transaction tx = session.getTransaction();
try {
...
...
...
tx.commit();
}
catch (Exception e) {
tx.rollBack();
}
可以省略吗?我的基于 Hibernate 的代码当然可以在没有它的情况下工作。
编辑(跟进):那么为什么人们继续在他们的方法中编写样板,即使他们的类已经被注释了?
最佳答案
可以,只要
事务管理已正确配置,请参阅 13.3.3 Declarative transaction demarcation
对该方法的调用不会违反基于 AOP 的声明式事务管理的限制,请参阅 10.5.1 Understanding the Spring Framework's declarative transaction implementation (或者您使用 AspectJ 集成等高级功能来克服这些限制)。
也就是说,对该方法的所有调用都是在从 Spring 获得的对象上执行的,并且不会从同一类的其他方法执行任何调用。Session
通过调用SessionFactory.getCurrentSession()
在方法内部获得。
关于java - 如果一个类被标记为@Transactional,是否可以省略通常的事务管理样板代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661122/