2012-07-28 65 views
0

我们有一个servlet来处理许多并发请求,有时候一些请求会抛出异常。只见从休眠指导这样的警告:Hibernate中的事务每会话或每事务查询模式?

“如果Session抛出异常,包括任何的SQLException, 立即回滚数据库事务,调用Session.close() ,丢弃该Session实例。”

在我的真实场景中,请求已经对数据库进行了许多重要更改,当我们发现异常时,我们必须回滚之前所做的所有更改。

因此,我们似乎必须实现事务每请求模式,而不是事务每查询,以确保所有更改都将被回滚。

是吗?

回答

0

它取决于你想要什么,但是,一般来说,你希望一个事务处理一个请求的生命周期,并且你希望该请求的所有数据库操作都能参与到这个事务中。通常,这也意味着有一个会话绑定到请求。

+0

这种模式的性能和并发环境中的可伸缩性如何?我发现每笔交易都会有很多查询。但是Hibernate指南说: “为了减少数据库中的锁争用,数据库事务必须尽可能短。” – QuangHD 2012-07-28 11:31:55