伙计们,在视图中打开会话和每次请求会话模式之间的区别是什么? 我正在使用Spring MVC和Hibernate。 我不是在谈论这里的事务划分,因为每个请求的Session似乎是1个会话:1个tx。但对于OSIV,有1个会话,然后有多个事务(每个服务调用1个)。有人可以对此有所了解吗?
答案 0 :(得分:2)
OSIV的定义特征实际上不是多个事务,而是在呈现视图时会话保持打开状态。 JBoss wiki上的This page说明了这种设置(尽管从Web层手动管理事务不是我的一点茶......对于更多预先打包的事情,请参阅Spring's OpenSessionInViewFilter)。
有一个会话,一个交易。这是stil OSIV,因为所有工作,包括呈现视图都在会话范围内完成。请注意,即使您将所有服务方法标记为@Transactional(或等效的XML),它们仍将参与同一个事务,除非它们特别要求启动新事务。
因此,OSIV可以是一种每个请求的会话,它们有时可以互换使用。但我想说,如果你确保在视图渲染之前关闭你的单个会话,那么每个请求实现的会话可能不是OSIV。