在View中打开Session与@Transactional

时间:2013-05-09 15:18:26

标签: java spring hibernate transactions open-session-in-view

我一直在我的服务层使用@Transactional注释。但是要解决由于视图中的延迟加载而导致的错误,我必须使用Open Session in View Filter。在此之后,不使用@Transaction本身就会打开Session并开始事务。这是否意味着@Transactions不是必需的?如何处理交易和回滚,然后在服务层?

1 个答案:

答案 0 :(得分:3)

The javadoc解释道:

  

此过滤器通过当前线程使Hibernate会话可用,该线程将由事务管理器自动检测。它适用于通过HibernateTransactionManager或JtaTransactionManager进行的服务层事务以及非事务性执行(如果配置正确)。

     

注意:默认情况下,此过滤器不会刷新Hibernate会话,刷新模式设置为FlushMode.NEVER。它假定与关注刷新的服务层事务结合使用:活动事务管理器将在读写事务期间临时将刷新模式更改为FlushMode.AUTO,并在最后将刷新模式重置为FlushMode.NEVER每笔交易。如果您打算在没有事务的情况下使用此过滤器,请考虑更改默认刷新模式(通过“flushMode”属性)。