HibernateSessionFactory.java
上传用户:nbxinmin
上传日期:2021-10-09
资源大小:46k
文件大小:3k
源码类别:

Internet/IE编程

开发平台:

Java

  1. package com.xdf.exams.dao.hibernate;
  2. import org.hibernate.HibernateException;
  3. import org.hibernate.Session;
  4. import org.hibernate.cfg.Configuration;
  5. /**
  6.  * Configures and provides access to Hibernate sessions, tied to the
  7.  * current thread of execution.  Follows the Thread Local Session
  8.  * pattern, see {@link http://hibernate.org/42.html }.
  9.  */
  10. public class HibernateSessionFactory {
  11.     /** 
  12.      * Location of hibernate.cfg.xml file.
  13.      * Location should be on the classpath as Hibernate uses  
  14.      * #resourceAsStream style lookup for its configuration file. 
  15.      * The default classpath location of the hibernate config file is 
  16.      * in the default package. Use #setConfigFile() to update 
  17.      * the location of the configuration file for the current session.   
  18.      */
  19.     private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
  20. private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
  21.     private  static Configuration configuration = new Configuration();
  22.     private static org.hibernate.SessionFactory sessionFactory;
  23.     private static String configFile = CONFIG_FILE_LOCATION;
  24.     private HibernateSessionFactory() {
  25.     }
  26. /**
  27.      * Returns the ThreadLocal Session instance.  Lazy initialize
  28.      * the <code>SessionFactory</code> if needed.
  29.      *
  30.      *  @return Session
  31.      *  @throws HibernateException
  32.      */
  33.     public static Session getSession() throws HibernateException {
  34.         Session session = (Session) threadLocal.get();
  35. if (session == null || !session.isOpen()) {
  36. if (sessionFactory == null) {
  37. rebuildSessionFactory();
  38. }
  39. session = (sessionFactory != null) ? sessionFactory.openSession()
  40. : null;
  41. threadLocal.set(session);
  42. }
  43.         return session;
  44.     }
  45. /**
  46.      *  Rebuild hibernate session factory
  47.      *
  48.      */
  49. public static void rebuildSessionFactory() {
  50. try {
  51. configuration.configure(configFile);
  52. sessionFactory = configuration.buildSessionFactory();
  53. } catch (Exception e) {
  54. System.err
  55. .println("%%%% Error Creating SessionFactory %%%%");
  56. e.printStackTrace();
  57. }
  58. }
  59. /**
  60.      *  Close the single hibernate session instance.
  61.      *
  62.      *  @throws HibernateException
  63.      */
  64.     public static void closeSession() throws HibernateException {
  65.         Session session = (Session) threadLocal.get();
  66.         threadLocal.set(null);
  67.         if (session != null) {
  68.             session.close();
  69.         }
  70.     }
  71. /**
  72.      *  return session factory
  73.      *
  74.      */
  75. public static org.hibernate.SessionFactory getSessionFactory() {
  76. return sessionFactory;
  77. }
  78. /**
  79.      *  return session factory
  80.      *
  81.      * session factory will be rebuilded in the next call
  82.      */
  83. public static void setConfigFile(String configFile) {
  84. HibernateSessionFactory.configFile = configFile;
  85. sessionFactory = null;
  86. }
  87. /**
  88.      *  return hibernate configuration
  89.      *
  90.      */
  91. public static Configuration getConfiguration() {
  92. return configuration;
  93. }
  94. }