0

伙计们, Open Session in ViewSession per request模式有什么区别?我正在使用 Spring MVC 和 Hibernate 。我不是在这里谈论事务分界,因为每个请求的 Session 似乎是 1 session:1 tx。但是对于 OSIV,有 1 个会话,然后有多个事务(每个服务调用 1 个)。有人可以对此有所了解吗?

4

1 回答 1

3

OSIV 的定义特征实际上并不是多个事务,而是在呈现视图时会话保持打开状态。 JBoss wiki 上的这个页面说明了这种设置(尽管从 web 层手动管理事务不是我的一杯茶……对于更预先打包的东西,请参阅Spring 的 OpenSessionInViewFilter)。

有一个会话,一个事务。这仍然是 OSIV,因为包括渲染视图在内的所有工作都是在会话范围内完成的。请注意,即使您将所有服务方法标记为 @Transactional(或 XML 等效方法),它们仍将参与同一个事务,除非它们特别需要启动新事务。

所以 OSIV 可以是一种按请求会话的类型,它们有时可以互换使用。但我会说,如果您确保在视图呈现之前关闭单个会话,则每个请求实现都可能有一个不是 OSIV 的会话。

于 2012-05-26T13:12:52.160 回答