Hibernate的事务控制

1. 事务的特性

    事务具备原子性(不可再分)、一致性(一种状态到另一种正确的状态)、隔离性(并发执行的事务之间互不影响)和持久性(提交过后就永久存储)4个属性,简称ACID。

2. Session与事务

    Hibernate的事务(Transaction对象)通过Session的BeginTransaction()方法显式打开,从底层实现来看,Hibernate事务由TransactionFactory的实例来产生,TransactionFactory是一个事务工厂类的接口。应用程序编程时无须操作TransactionFactoty产生事务,因为在SessionFactory底层已经封装了TransactionFactory。

    SessionFactory对象的创建代价很高,它是线程安全的对象,被设计成可以被所有线程共享。通常,SessionFactory会在应用程序启动时创建,应用退出时关闭。

    Session对象也是线程安全的,对于单个业务进程、单个工作单元而言Session只被使用一次,创建Session时,并不会立即打开与数据库之间的连接,只有需要进行数据库操作时,Session才会获取JDBC连接。因此打开和关闭Session,并不会对性能造成很大的影响。

    由此可见,长Session应用性能影响并不大,只要它没有长时间打开数据库的连接。相反,数据库长事务会导致应用程序无法承载高并发的负荷。

    Hibernate的所有持久化访问都必须在Session管理下进行,建议采用每个请求对应一次Session的模式——每个请求表示需要执行一个完整的业务功能。如果是应用程序长事务则可以通过 自动化版本(Hibernate自动乐观并发控制,自动检测实体是否修改)、脱管对象(将脱离对象重新关联)和长生命周期Session(事务提交之后断开和底层的JDBC连接,新的请求到来重新连接上JDBC连接)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值