我正在使用纯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
由于会话工厂的错误使用,实现单例模式的各种方式等而发生。请提供你的建议。