Hibernate学习之---事务控制

事务是一步或几步基本操作组成的逻辑执行单元,这些基本操作作为一个整体执行单元,它们要么全部执行,要么全部取消执行,绝不能仅仅执行部分。
事务具备4个特性:原子性、一致性、隔离性和持续性。

1.Session与事务

Hibernate的事务(Transaction对象)通过Session的beginTransaction()方法显示打开,Hibernate自身并不提供事务控制行为。
从编程角度来看,Hibernate的事务由Session对象开启;从底层实现来看,Hibernate事务由TransactionFactory的实例来产生。
TransactionFactory是一个事务工厂的接口,Hibernate为不同的事务环境提供了不同的实现类。
应用程序编程后无须手动操作TransactionFactory产生事务,这是因为SessionFactory底层已经封装了TransactionFactory。
Hibernate建议采用每个请求对应一次Session的模式—因为一次请求通常表示需要执行一个完整的业务功能,这个功能由一系列数据库原子操作组成,而且它们应该是一个逻辑上的整体。

3.上下文相关的Session

HibernateUtil工具类,该工具类可以保证将线程不安全的Session绑定限制在当前线程内—也就是实现一种”上下文相关”的Session。
SessionFactory.getCurrentSession()方法,该方法可直接获取”上下文相关”的Session。

Hibernate此处管理上下文相关的Session的方式就是典型的策略模式。
如果使用TreadLocalSessionContext策略,Hibernate的Session会随着getCurrentSession()方法自动打开,并随着事务提交自动关闭。对于在容器中使用Hibernate的场景,通常会采用JTASessionContext策略;对于独立的Hibernate应用而言,通常会采用ThreadLocalSessionContext策略。

    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.current_session_context_class">jta<property>

猜你喜欢

转载自blog.csdn.net/stronghyq/article/details/76863026