我创建了自定义会话工厂提供程序类。我在哪里设置hibernate属性和带注释的类。我有超过100个带注释的类。当我登录应用程序时,加载会话工厂需要很长时间。有没有办法克服这个问题,或者我有任何错误?请帮帮我。
public class SessionFatoryProvider {
public void setNewSessionFactory(String uname,String password,HttpSession hs){
String jdbcUrl = Constants.DB_URL+Constants.DB;
java.util.Properties hibernateProperties = new java.util.Properties();
hibernateProperties.setProperty("hibernate.connection.driverClassNames", "com.mysql.jdbc.Driver");
hibernateProperties.setProperty("hibernate.connection.url", jdbcUrl);
hibernateProperties.setProperty("hibernate.connection.username", uname);
hibernateProperties.setProperty("hibernate.connection.password", password);
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
hibernateProperties.setProperty("hibernate.show_sql", "true");
hibernateProperties.setProperty("hibernate.hbm2ddl.auto","none");
hibernateProperties.setProperty("current_session_context_class","org.hibernate.context.spi.AbstractCurrentSessionContext");
hibernateProperties.setProperty("hibernate.cache.use_second_level_cache","false");
hibernateProperties.setProperty("hibernate.cache.use_query_cache","false");
LocalSessionFactoryBean slfb = new LocalSessionFactoryBean();
slfb.setHibernateProperties(hibernateProperties);
slfb.setPackagesToScan("com.orb.bean"); //My entity class package
try {
slfb.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
SessionFactory mySessionFactory = slfb.getObject();
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(mySessionFactory);
hs.setAttribute("HibernateTransactionManager", transactionManager); //Here I am setting hibernate transaction manager in session
}
}
答案 0 :(得分:2)
由于您已经使用了Spring(例如LocalSessionFactoryBean),因此您应该configure the application context以便LocalSessionFactoryBean是一个单例。
因此无需手动创建SessionFactory。这也适用于事务管理配置。
根据reference documentation,SessionFactory是一个昂贵的对象,因为它是一个线程安全的对象,它应该是一个单例:
SessionFactory是一个昂贵的创建线程安全对象, 旨在由所有应用程序线程共享。它被创建一次, 通常在应用程序启动时,从Configuration实例。
答案 1 :(得分:0)
尽量不为每个用户创建会话工厂。设置应用程序用于连接数据库的系统数据库用户。 您的应用程序应该只包含一个会话工厂。
在启动应用程序期间初始化会话工厂。如果它是一个Web应用程序,您可以使用启动servlet执行此操作。