在Hibernate中提供Session对象的DB管理器有什么好的设计模式?

时间:2013-06-03 12:08:13

标签: java hibernate design-patterns

我正在开发一个为任何消费者提供会话的课程。因此,该类负责获取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 个答案:

答案 0 :(得分:2)

SessionFactory实例的创建是一项非常昂贵的操作,因为它拥有大量信息(如图here所示);因为它是线程安全的,具有单个实例(作为单例)或保持静态引用应该就足够了。

但是,将它作为单例使用可能会让您更好,更灵活地控制对象的生命周期,而不是将其作为静态类中的字段存储。您可以将数据访问对象依赖于IDatabaseService,公开方法getSession,由HibernateService的单个实例实现。