原文请看: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);
运行正常……
浙公网安备 33010602011771号