您的位置:首页 > 编程语言 > Java开发

异常记录001—hibernate 4.2.4 Final 测试出现Connection cannot be null when 'hibernate.dialect' not set

2016-07-21 21:43 375 查看
在学习Hibernate的HelloWorld的时候遇到一个错误,困扰了一天,查了很多资料,终于解决。可能很多人跟我一样都是看旧版本的hibernate视频

学习,到动手写的时候却用了最新版,所以这样会遇到很多坑。

今天要解决的异常是:

Connection cannot be null when 'hibernate.dialect' not set

先看看测试类

@Test
public void test01(){
//1.获取SessionFactory
Configuration cfg = new Configuration();
ServiceRegistry registry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = cfg.buildSessionFactory(registry);

//2.获取Session
Session session = null;

try {
session = sessionFactory.openSession();

//3.开启事务
session.beginTransaction();

User user = new User();
user.setUsername("zs");
user.setPassword("123");
user.setNickname("ZhangSan");
user.setBirth(new Date());
session.save(user);

//4.提交事务
session.getTransaction().commit();
} catch (Exception e){
if(session!=null){
session.getTransaction().rollback();
}
} finally {
if(session!=null){
session.close();
sessionFactory.close();
}
}

}


运行就会出现异常:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.485 sec <<< FAILURE! - in org.mkh.hibernate.TestUser
test01(org.mkh.hibernate.TestUser)  Time elapsed: 0.44 sec  <<< ERROR!
org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:97)
at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:67)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:174)
at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
at org.mkh.hibernate.TestUser.test01(TestUser.java:25)


这是因为在建立SessionFactory 之前,我的Configuration 没有去读hibernate.cfg.xml中的配置,也就是没有进行 以下这一步操作

cfg.configure();   //读配置文件

所以在我的项目中直接去建立SessionFactory就会出现没有 设置方言的问题了

还有一点要注意的就是 Hibernate4的buildSessionFactory() 方法已经被弃用了,要使用新的带参数的buildSessionFactory(ServiceRegistry registry) 方法,这个方法会去获取配置文件的内容,所以Configuration读hibernate.cfg.xml中的配置 一定要在 建立 ServiceRegistry  之前调用。正确的代码如下

        //1.获取SessionFactory
Configuration cfg = new Configuration();
cfg.configure(); //读配置文件ServiceRegistry registry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = cfg.buildSessionFactory(registry);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java hibernate