Hibernate的事务控制

来源:互联网 发布:上海行知小学怎么样 编辑:程序博客网 时间:2024/04/28 05:45

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
原创粉丝点击