在利用Hibernate(4.3.5)用户手册中提供的HibernateUtil帮助类产生的SessionFactory实例进行数据库访问时,会产生
Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set异常(配置文件用的是hibernate.cfg.xml)
以下是Hibernate用户手册中的HibernateUtil帮助类(而且它的buildSessionFactory()方法中还缺少了return 语句)
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
根据网上针对"hibernate.dialect" not set问题的解决方法,可将该帮助类稍作修改,如下:
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil
{
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
return configuration.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
如上修改后,当你cfg文件正确配置的前提下,再利用该类获取的SessionFactory进行相关操作时应该不会再报上述异常了(在H4.3.5版上做过简单测试)