java在Hibernate中提供会话对象的DB管理器的良好设计模式是什么?
我正在开发一个类,为任何消费者提供会话。因此,这个类负责获取一个SessionFactory,打开一个会话,并在需要时传递它
那么,什么是更好的设计呢? 类中的静态方法
public class DbStatIo {
private static SessionFactory factory=null;
public static Session getSessionForStatDb(){
if (factory==null){
SessionFactory factory=new Configuration()
.configure(FilesManager.getSenseiConfigForStatDb())
.buildSessionFactory();
}
return factory.openSession();
}
}
还是仅仅是一个地方公共活动?还是别的什么
# 1 楼答案
创建一个
SessionFactory
实例是一个非常昂贵的操作,因为它拥有大量的信息(如图here);因为它是线程安全的,所以拥有一个实例(作为单实例)或保持一个静态引用就足够了但是,将它作为一个单例使用可能会比将其存储为静态类中的字段更好、更灵活地控制对象的生命周期。您可以依赖于
IDatabaseService
的数据访问对象,公开一个方法getSession
,该方法由HibernateService
的单个实例实现