<!-- 事务隔离级别 1-Read uncommitted 2-Read committed 4-Repeatable read 8-Serializable --> <property name="hibernate.connection.isolation">2</property>
需求:一个业务需要同时执行多个数据库操作
ServiceDemo{
fun(){
Dao1.del();
Dao2.add();
}
}
这样的话就必须保证连接对象时同一个,这样就有两种方式:向下传递(参数传递),使用ThreadLocal对象(将连接对象绑定到当前线程,在DAO的方法中,通过当前线程获取连接对象)
Hibernate框架内部已经绑定好了ThreadLocal,在SessionFactory中提供了一个方法getCurrentSession();
使用步骤:
1、调用方法
public static Session getCurrentSession() { return factory.getCurrentSession(); }
2、配置
<!-- 配置session绑定本地线程 thread:Session对象的生命周期与本地线程一致,线程关闭session关闭,
所以不需要手动关闭(session.close()) jta:session对象的生命周期与JTA事务绑定(跨数据库的) managed:Hibernate委托程序来关联Session对象的生命周期 --> <property name="hibernate.current_session_context_class">thread</property>