问答详情
源自:1-2 添加hibernate支持

HibernateSessionFactory.java

HibernateSessionFactory.java这个文件在哪拷贝啊

提问者:谁能初心不负 2018-08-30 13:47

个回答

  • sunbohan00
    2018-09-10 15:07:41

    package com.imooc.page;


    import org.hibernate.HibernateException;

    import org.hibernate.Session;

    import org.hibernate.cfg.Configuration;

    import org.hibernate.service.ServiceRegistry;

    import org.hibernate.service.ServiceRegistryBuilder;


    /**

     * Configures and provides access to Hibernate sessions, tied to the

     * current thread of execution.  Follows the Thread Local Session

     * pattern, see {@link http://hibernate.org/42.html }.

     */

    public class HibernateSessionFactory {


        /** 

         * Location of hibernate.cfg.xml file.

         * Location should be on the classpath as Hibernate uses  

         * #resourceAsStream style lookup for its configuration file. 

         * The default classpath location of the hibernate config file is 

         * in the default package. Use #setConfigFile() to update 

         * the location of the configuration file for the current session.   

         */

    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

        private static org.hibernate.SessionFactory sessionFactory;

        private static Configuration configuration = new Configuration();

        private static ServiceRegistry serviceRegistry; 


    static {

        try {

    configuration.configure();

    serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

    sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    } catch (Exception e) {

    System.err.println("%%%% Error Creating SessionFactory %%%%");

    e.printStackTrace();

    }

        }

        private HibernateSessionFactory() {

        }

    /**

         * Returns the ThreadLocal Session instance.  Lazy initialize

         * the <code>SessionFactory</code> if needed.

         *

         *  @return Session

         *  @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;

        }


    /**

         *  Rebuild hibernate session factory

         *

         */

    public static void rebuildSessionFactory() {

    try {

    configuration.configure();

    serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

    sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    } catch (Exception e) {

    System.err.println("%%%% Error Creating SessionFactory %%%%");

    e.printStackTrace();

    }

    }


    /**

         *  Close the single hibernate session instance.

         *

         *  @throws HibernateException

         */

        public static void closeSession() throws HibernateException {

            Session session = (Session) threadLocal.get();

            threadLocal.set(null);


            if (session != null) {

                session.close();

            }

        }


    /**

         *  return session factory

         *

         */

    public static org.hibernate.SessionFactory getSessionFactory() {

    return sessionFactory;

    }

    /**

         *  return hibernate configuration

         *

         */

    public static Configuration getConfiguration() {

    return configuration;

    }


    }