我一直在服务层中使用@Transactional批注。但是要解决由于延迟加载View而导致的错误,我不得不使用Open Session in View Filter。此后,无需使用@Transaction本身即可打开Session并开始事务。那么这是否意味着不需要@Transactions?然后如何在服务层中处理事务和回滚?

最佳答案

The javadoc对此进行了解释:

该过滤器通过当前线程使Hibernate Sessions可用,它将由事务管理器自动检测到。它适用于通过HibernateTransactionManager或JtaTransactionManager进行的服务层事务,也适用于非事务执行(如果配置正确)。
注意:默认情况下,此过滤器将不刷新休眠会话,并且刷新模式设置为FlushMode.NEVER。它假定与护理刷新的服务层事务结合使用: Activity 事务管理器将在读写事务期间将刷新模式临时更改为FlushMode.AUTO,最后将刷新模式重置为FlushMode.NEVER。每笔交易。如果打算在不使用事务的情况下使用此过滤器,请考虑更改默认的刷新模式(通过“flushMode”属性)。

10-01 03:41