【问题标题】:Open Session in View vs @Transactional在视图中打开会话与@Transactional
【发布时间】:2013-05-09 15:18:26
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    The javadoc 解释它:

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

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

    【讨论】:

    • 无法理解。这是否意味着我不应该在服务层使用@Transactional。你能以更好的方式解释或可能是一些链接
    • 没有。这意味着您应该像往常一样对服务层进行编码,像往常一样使用@Transactional。不同之处在于即使在事务提交后会话仍将保持打开状态。
    猜你喜欢
    • 2011-04-11
    • 2010-12-23
    • 1970-01-01
    • 2011-01-14
    • 2015-08-14
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多