13.1 hibernate下载及HibernateInitialize类

版本:下载较新的4.3.5版本,
下载地址:http://download.csdn.net/detail/solio5/7640023
下载的压缩文件,把解压缩的lib文件夹放到某个地方。
在eclipse中创建叫My_Hibernate的library,它需要添加很多jar包,此时添加的是hibernate/lib/required下的多个jar文件。以后用此library即可。

问1:hibernate的版本与代码啥关系?
答:比如在获取sessionFactory时,不同的版本代码不一样。
如果某版本的代码不对应对应的版本,会出现错误比如:
java.lang.NoClassDefFoundError:
Could not initialize class com.mr.hibernate.HibernateInitialize

比如对于HibernateInitialize类,里面两处求sessionFactory就是不同版本对应不同代码。

//  HibernateInitialize.java
package com.mr.hibernate;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
/**
 * Hibernate初始化类
 *
 */
public class HibernateInitialize {
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();//ThreadLocal对象
    private static SessionFactory sessionFactory = null;
    //静态块
    static {
        try {
            /*  原来书本版本的
            // 加载Hibernate配置文件
            Configuration cfg = new Configuration().configure();
            sessionFactory = cfg.buildSessionFactory();
            */
            // 网上对应4.3.5版本的
            Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
            applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory(builder.build());

        } catch (Exception e) {
            System.err.println("创建会话工厂失败");
            e.printStackTrace();
        }
    }
    /**    
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        if (session == null || !session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ? sessionFactory.openSession(): null;
            threadLocal.set(session);
        }

        return session;
    }

    public static void rebuildSessionFactory() {
        try {
            /*  原来书本的
            // 加载Hibernate配置文件
            Configuration cfg = new Configuration().configure();
            sessionFactory = cfg.buildSessionFactory();
            */
            // 网上的
            Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
            applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory(builder.build());

        } catch (Exception e) {
            System.err.println("创建会话工厂失败");
            e.printStackTrace();
        }
    }
    /** 
     * @return SessionFactory对象
     */
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    /**     
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);//
        if (session != null) {
            session.close();
        }
    }
}

参见解答:
http://stackoverflow.com/questions/26860762/java-lang-noclassdeffounderror-could-not-initialize-class-xxx-xxx-xxx-hibernate

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tonghuawanli/article/details/52382817
个人分类: Java_Web书本
上一篇eclipse一些设置
下一篇14、Hibernate高级应用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭