Hibernate:使用`SessionFactory`的最佳方式

时间:2015-04-07 17:30:41

标签: java hibernate sessionfactory

我正在使用纯JSP,Servlet和Hibernate开发Web应用程序。最近几天我遇到SessionFactory Hibernate的问题,不知道实施它的最佳方法。在不同的地方,开发人员声称应用程序应该有一个SessionFactory。所以,我创建了一个像下面这样的单例类。

package dao;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class SessionFactoryBuilder
{
    private static SessionFactoryBuilder instance;
    private static SessionFactory sessionFactory;

    private SessionFactoryBuilder()
    {
        buildConfig();
    }

    private static void buildConfig()
    {
        Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                            .applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory(builder.build());
    }

    public static SessionFactoryBuilder getInstance()
    {
         if(instance == null) 
         {
            instance = new SessionFactoryBuilder();

         }
      return instance;
    }

    public SessionFactory getSessionFactory()
    {
        return sessionFactory;
    }
}

以下是使用SessionFactoryBuilder

的课程
public class AgentImpl implements AgentInterface
{
    SessionFactoryBuilder sessionFactory = SessionFactoryBuilder.getInstance();

    @Override
    public Session openCurrentSession() {
            Session currentSession = sessionFactory.getSessionFactory().openSession();
            return currentSession;
    }

    @Override
    public Transaction openTransaction(Session session) {
        Transaction beginTransaction = session.beginTransaction();
        return beginTransaction;
    }

    @Override
    public void save(Agent entity, Session session) {
        session.save(entity);
    }

    @Override
    public void update(Agent entity, Session session) {
        session.update(entity);
    }
 }

现在我的问题是,这是使用SessionFactory的最佳方式吗?这可能听起来像一个愚蠢的问题,但是当您考虑servlet中的多线程行为时,它不会发生,Driver#Connect error由于会话工厂的错误使用,实现单例模式的各种方式等而发生。请提供你的建议。

0 个答案:

没有答案