异常记录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
先看看测试类
运行就会出现异常:
这是因为在建立SessionFactory 之前,我的Configuration 没有去读hibernate.cfg.xml中的配置,也就是没有进行 以下这一步操作
所以在我的项目中直接去建立SessionFactory就会出现没有 设置方言的问题了
还有一点要注意的就是 Hibernate4的buildSessionFactory() 方法已经被弃用了,要使用新的带参数的buildSessionFactory(ServiceRegistry registry) 方法,这个方法会去获取配置文件的内容,所以Configuration读hibernate.cfg.xml中的配置 一定要在 建立 ServiceRegistry 之前调用。正确的代码如下
学习,到动手写的时候却用了最新版,所以这样会遇到很多坑。
今天要解决的异常是:
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树