日期:2014-05-20 浏览次数:21017 次
public SessionFactory buildSessionFactory() throws HibernateException { log.debug( "Preparing to build session factory with filters : " + filterDefinitions ); secondPassCompile(); validate(); Environment.verifyProperties( properties ); Properties copy = new Properties(); copy.putAll( properties ); PropertiesHelper.resolvePlaceHolders( copy ); Settings settings = buildSettings( copy ); return new SessionFactoryImpl( this, mapping, settings, getInitializedEventListeners() ); }
------解决方案--------------------
sessionFactory是重量级的,通常我们在一个单数据源的应用里,只需要一个sessionFactory,所以我们一般采用单例的模式来处理,但是不是说sessionFactory这个类是单例的。这个是我们自己去实现的
比如myeclipse自动生成的HibernateSessionFactory
private static org.hibernate.SessionFactory sessionFactory;
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
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;
}
------解决方案--------------------
这个机制其实很是安全 因为每使用一次就会创建一个新的 sessionFactory
------解决方案--------------------
hibernate sessionFactory每使用一次就会创建一个新的 sessionFactory
------解决方案--------------------