Hibernate中SessionFactory的创建和Session的获取

在Hibernate中SessionFactory的获取和Session获取的代码如下:

package com.xingguo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class SessionFactoryUtil {

    private SessionFactoryUtil(){}

    private static SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        Configuration config = new Configuration().configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        return config.buildSessionFactory(serviceRegistry);
    }

    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }

    public static Session getSession(){

        return getSessionFactory().getCurrentSession();
    }
}
  • 其中Configuration config = new Configuration().configure(); 是读取默认的hibernate.cfg.xml的文件。
  • 在最新的Hibernate中config.buildSessionFactory()这个方法已经被废弃。推荐使用的就是上面利用ServiceRegistry接口。
  • 其中获取Session推荐使用getCurrentSession()方法,而不推荐使用openSession()方法。

ServiceRegistry 是 Service 的注册表, 它为Service提供了一个统一的加载 / 初始化 / 存放 / 获取机制。
使用getCurrentSession要在配置文件hibernate.cfg.xml里进行如下设置
如果使用的是本地事务(jdbc事务)

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

如果使用的是全局事务(jta事务)

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

你可能感兴趣的:(Hibernate,session,factory)