我一直在我的服务层使用@Transactional
注释。但是要解决由于视图中的延迟加载而导致的错误,我必须使用Open Session in View Filter
。在此之后,不使用@Transaction本身就会打开Session并开始事务。这是否意味着@Transactions不是必需的?如何处理交易和回滚,然后在服务层?
答案 0 :(得分:3)
The javadoc解释道:
此过滤器通过当前线程使Hibernate会话可用,该线程将由事务管理器自动检测。它适用于通过HibernateTransactionManager或JtaTransactionManager进行的服务层事务以及非事务性执行(如果配置正确)。
注意:默认情况下,此过滤器不会刷新Hibernate会话,刷新模式设置为FlushMode.NEVER。它假定与关注刷新的服务层事务结合使用:活动事务管理器将在读写事务期间临时将刷新模式更改为FlushMode.AUTO,并在最后将刷新模式重置为FlushMode.NEVER每笔交易。如果您打算在没有事务的情况下使用此过滤器,请考虑更改默认刷新模式(通过“flushMode”属性)。