Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108963
  • 博文数量: 60
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 12:19
文章分类

全部博文(60)

文章存档

2015年(3)

2014年(41)

2013年(16)

我的朋友

分类: Windows平台

2014-04-15 16:26:58

HibernateHibernate4获取SessionFactory对象方法的变化

Hibernate用来获取配置文件的类是Configuration,若用Annotation的话就是AnnotationConfiguration类。

例:Configuration config = new Configuration();

config.configure("hibernate.cfg.xml");//configure()方法取得。

//或者config.configure();不用加参数,因为只有需要一个//hibernate.cfg.xmlsrc路径下。Hibernate会自动匹配

取得配置文件后:需要一个Session对象来操作数据库的存取。Session对象是有SessionFactory的对象来产生的。

4.0版本之前sessionFactory由取得配置文件的对象config.BuildSessionFactory();产生。

SessionFactory sessionFactory =config.buildSessionFactory();

再由sessionFactory.getCurrentSession();方法产生session

Session session = sessionFactory.getCurrentSession();

有了session对象之后就可以对数据库进行操作了。但hibernate的所有操作都是建立在事务之上的。所以session操作之前要先打开一个事务:

session.beginTransaction();

同理操作完之后要提交事务:

session.getTransaction().commit();

若出错。可回滚:

session.getTransaction().roolback();(这两句可放在tyr{……}catch{……}语句里面)

另外还要关闭session对象:

session.close();

升级到4.0之后取得session的方法有所改变,hibernate增加了一个注册机ServiceRegistryBuilder 类。要先生成一个注册机对象,然后所有的生成SessionFactory的对象要象注册机注册一下再用。生成方法还是config.buildSessionFactory()方法,不过加了个注册机的参数。config.buildSessionFactory(ServiceRegistry  registry);

具体方法如下:

ServiceRegistry resgistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();

SessionFactory  factory = config.buildSessionFactory(resgistry);

Session session = factory.openSession();

 

 

hibernate4下拿到SessionFactory的一段经典代码

当我们去拿hibernate4sessionFactory时,我们发现原来使的一直很顺手的new Configuration().configure().buildSessionFactory()中的buildSessionFactory方法已经过期了,取而代之的是buildSessionFactory(ServiceRegistry serviceRegistry)方法。查看ServiceRegistry的构造方法,顿时感觉天旋地转,这相当地令人抓狂,不过hibernate可能有其自己的考虑。

经过自己去google,发现了一段经典的取ServiceRegistry的代码,不敢独享,特贴出来与大家共享!

privatestaticSessionFactory sessionFactory;
privatestaticServiceRegistry serviceRegistry;
 
privatestaticSessionFactory configureSessionFactory()throwsHibernateException{
    Configuration configuration =newConfiguration();
    configuration.configure();
    serviceRegistry =newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    return sessionFactory;
}
 
相关代码:

package cn.framework.dao.util;

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

public class HibernateUtil {    //Hibernate  public static SessionFactory sessionfactory = null;

 static {   try {    // 通过hibernate.cfg.xml 产生一个SessionFactory    sessionfactory = new Configuration().configure().buildSessionFactory();   } catch (Throwable ce) {    ce.printStackTrace();   }  }      //Hibernate4  private static SessionFactory sessionFactory;  private static ServiceRegistry serviceRegistry;

 public static SessionFactory configureSessionFactory()throws HibernateException {   Configuration configuration = new Configuration();   configuration.configure();   serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   sessionFactory = configuration.buildSessionFactory(serviceRegistry);   return sessionFactory;  } }

阅读(964) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~