hibernate 获取sesssionFacotory

hibernate的版本更新很快,获取sessionFactory的方式也在变化

1.通用的方式:

public SessionFactory test1(){
        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        return sessionFactory;
    }

这种方式是最早的方式,在以前不支持注解.直到 3.6.0.Final 这个版本才开始支持注解的方式.到 4.0.0.Final 过时

2.annotation

public SessionFactory test2(){
        Configuration cfg = new org.hibernate.cfg.AnnotationConfiguration().configure("hibernate.cfg.xml");
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        return sessionFactory;

    }

自有annotation出现以来,hibernate先使用这种方式支持注解.到 3.6.0.Final 过时了.也就是方式一开始支持注解.到 4.3.0.Final 这个版本的时候,

org.hibernate.cfg.AnnotationConfiguration 整个类都不存在了.也就是彻底取消了这种方式.

3.service的方式
    public SessionFactory test3(){
        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
        SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
        return sessionFactory;
    }

这种使用方法经历3个大版本  4.0.x.Final 4.1.x.Final  4.2.x.Final 如果想在4.3.0.Final 继续使用过时的方法,ServiceRegistryBuilder 下已经没有buildServiceRegistry()这个方法了,使用 build() 代替

4.service2

Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
        SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
        return sessionFactory;

在最新的4.3.x.Final中使用,5的版本还没出ga,目前测试版也是使用的这种方式.

注:

hibernate3.4之前的版本都是使用cglib(cglib 2.1.3, asm 1.5.3 ,asm-attr 1.5.3)的方式进行代理从3.4(包含3.4)开始使用javassist进行代理
时间: 2024-12-28 14:37:23

hibernate 获取sesssionFacotory的相关文章

Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录)

今天公司项目的时候 我用Hibernate连接oracle 列出某个表全部记录的时候,发现有一个记录重复了.而直接用jdbc连接,就可以正确列出来. 本来还以为jdbc不稳定,还吓了我一跳.毕竟打算用它作为长久数据库嘛~~ 分析了一下,发现正好重复的数据的主键id重复了(或者说,那个jdbc建立那个表的时候,没有设置主键,因为随便测试的) 原来如此: 看来Hibernate是先获取全部id列表,然后再getItemById了.

hibernate获取实体更新前的值

在使用hibernat的时候有时需要获取实体在更新前的某个字段的值,但hibernate没有提供公开的api来获取,如果使用session的get方法或用hql获取始终只能获取到更新后的值(我说的是在同一个会话当中,如果你另启一个会话来获取的话当我没说),如果想要获取更新前的值只能拼sql,然后用jdbc来获取,但在研究hibernate的拦截器时候,发现在onFlushDirty中可以获取到更新前的值,如下: public boolean onFlushDirty(Object entity,

Hibernate 获取Session

Configuration cfg = null; SessionFactory factory = null; Session session = null; Transaction tx = null; @Before public void init(){ cfg = new Configuration().configure(); factory = cfg.buildSessionFactory(); session = factory.openSession(); tx = sess

【转载】Hibernate---在Hibernate中获取数据方式与缓存使用

原文地址:http://www.blogjava.net/pengpenglin/archive/2010/03/15/315440.html Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面. 缓存在Hibernate中主要有三个方面:一级缓存.二级缓存和查询缓存 ①一级缓存在Hibernate中对应的为session范围的缓存,也就是当session关闭时缓存即被清除,一级缓存

遇到的Exception/error及解决办法记录汇总

一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer). 然后,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset). 简单的说就是在连接断开后的读和写操作引起的. 2.如果在报错中有

基于SSH的高校网上选课系统的质量属性的实现

我对于基于SSH的高校网上选课系统的质量属性的实现是从可用性.性能.安全性.可维护性.易用性五个方面进行的实现. 可用性方面: 实现方式:(1)当系统试图超出限制范围来进行课程查询或选课时必须进行错误检测并且抛出异常,中止进一步的错误操作,所采用的战术为错误(异常)检测, 此异常属于Action层,只捕获自定义应用异常,其他异常上抛.Struts2提供了异常拦截器,拦截器会将定义的异常捕获,记录日志,然后根据配置的异常的类型顺序跳转到相应的页面.(2)遵从J2EE的系统提供了可以使用的事务服务,

spring(四) 手动整合web项目(SSH)

清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置文件,而不是每次都要手动使用new  ClassPathXmlApplicationContext来加载xml.所以,spring提供了一个ContextLoaderListener.有了它,tomcat启动时,就会加载配置文件. 导入spring.web....jar 1.web.xml中添加监听

sessionFactory的创建和四种查询方式

1,关于sessionFactory的创建 5.0版本之前,下面这种方式在5.0及之后,可能会出问题,建议修改为5.0之后的方式 // 实例化Configuration Configuration configuration = new Configuration(); // 加载hibernate.cfg.xml文件 configuration.configure("/hibernate.cfg.xml"); // 创建SessionFactory StandardServiceRe

为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?

转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类(Orz意思是你需要精力写一个类).然后,在大部分的服务中,我们又需要单独写一个Dao接口,并加个DaoImpl实现来操作数据库(好吧,再耗损2个类).紧接着,我们发现其实Service层也要单独写一个类(再加1个). 一共4个类外加1个xml--这不是作死么,5个文件.人家好端端地写PHP可能在一