原文请看:https://blog.csdn.net/kqygww/article/details/13095575

     今天学习了一下hibernate,在使用Junit测试的时候,突然报了一个错:org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set。简单的翻译一下:说当hibernate方言没有设置的时候,连接不能为空。很奇怪,我明明配置好了hibernate.cfg.xml里的所有信息(包括方言),实在很费解啊,于是去百度了一下这个错。

      错误原因:

1 /*3.创建一个serviceRegistry对象,就是创建一个service、hibernate的任何配置和服务
2  * 都需要在该对象中注册,才能生效
3  */
4  ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().        
5                                        applySettings(configuration.getProperties()).
buildServiceRegistry();

applySettings(configuration.getProperties())是获取hibernate.cfg.xml配置信息,然后传给ServiceRegistryBuilder(),但是在传入之前,configuration没有获取到hibernate.cfg.xml中的信息,所以在运行的时候会报属性值未设置错误。因此只要在applySettings(configuration.getProperties())之前获取hibernate.cfg.xml信息,并传给ServiceRegistryBuilder(),这样ServiceRegistryBuilder()就可以通过这些信息来构建ServiceRegistry了。可以通过Configuration的configure()方法来获取hibernate.cfg.xml中的配置信息。

     解决代码:

 1         //2.通过Configuration的configure()默认加载hibernate.cfg.xml配置文件
 2         Configuration configuration = new Configuration().configure();
 3         
 4         /*3.创建一个serviceRegistry对象,就是创建一个service、hibernate的任何配置和服务
 5          * 都需要在该对象中注册,才能生效
 6          */
 7         ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
 8                                               applySettings(configuration.getProperties()).
 9                                               buildServiceRegistry();
10         
11         sessionFactory=configuration.buildSessionFactory(serviceRegistry);

运行正常……

 

     

 

posted on 2018-07-19 15:01  一笑奈何顾影自怜  阅读(224)  评论(0)    收藏  举报