以购物来说,用户确认订单 到 信用卡支付 等,是和这个用户相关的一系列逻辑过程,确认订单时需要操作数据库,信用卡也需要操作数据库,但是,在订单确认和信用卡支付之间,该用户可能操作比较慢,等一段时间才完成,那么是不是在这个阶段,为保持事务,数据库连接一直打开呢?Hibernate的Session会在等待用户交互时,Session断开数据库连接。在整个应用事务过程中,Hibernate使用单例Session和单例类来实现。
为防止在等用户交互时,数据库数据被其他用户如管理员修改过,出现stale,数据不一致,所以,在写入时会重新读取数据库。
一般用户通过JDBC事务可以完成大部分事务,但是对于特殊应用,程序员如果对事务水平很高,可以主动干预事务粒度,这样就是悲观事务,意思大概是属于很小心,对事情都谨慎,从坏处悲观想,意思表示要求苛刻。