【发布时间】:2010-12-11 22:24:04
【问题描述】:
我对在 Spring 中使用 Hibernate 进行事务传播感到非常困惑。我在我的服务层方法上使用 Spring @Transactional 注释。有些被标记为“只读=真”。如果我的一个只读服务方法调用了一个非只读的方法,我该如何处理?
我想我可以标记我的所有读写方法以支持REQUIRES_NEW 传播,但这会导致我可能不想要的行为 - 即我只想要一个新事务,以防只读方法称为读写方法。如果一个读写方法调用另一个读写方法,我就不需要新事务了。
考虑到所有这些,我不明白 Open Session In View (OSIV) 的工作原理!当然,在 Spring 中使用 OSIV,OpenSessionInViewFilter 必须在调用服务方法之前启动事务。在这种情况下,它必须定义事务是只读的还是读写的。但是,它怎么会知道呢?它不知道在服务层的掩护下会发生什么。
我对这一切一无所知,希望有人向我解释!
【问题讨论】:
标签: java hibernate spring transactions