转自: http://blog.csdn.net/zys_hh/article/details/20715561
- package util;
-
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.service.ServiceRegistry;
-
- public class HiberUtil {
-
- static Configuration cfg;
- static ServiceRegistry serviceRegistry;
- static SessionFactory sessionFactory;
-
- static{
-
- cfg = new Configuration().configure();
-
- serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
-
- sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- }
-
-
-
-
-
- public static Session openSession(){
-
- return sessionFactory.openSession();
- }
-
-
-
-
-
- public static Session getCurrentSession(){
-
- return sessionFactory.getCurrentSession();
- }
-
- }
getCurrentSession与openSession的区别
getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭
getCurrentSession() 使用当前的session
openSession() 重新建立一个新的session
使用getCurrentSession()时 要在hibernate.cfg.xml文件中进行如下设置
如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>