今天在学习配置Hibernate的过程中,发现一个连接Mysql的错误,网上的解答基本都没有解决问题,最后是我自己找到解决方案的
我这边的环境是:
JAVA:8
hibernate-core:5.6.15.Final
mysql-connector-java:8.0.19
Hibernate初始化源代码:
//创建Configuration
Configuration configuration = new Configuration();
//获取SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
在创建SessionFactory的时候报错如下:
java.lang.UnsupportedOperationException: The application must supply JDBC connections
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
报错的意思是Mysql服务器连接出错,Mysql的方言没有定义
一开始我也是在方言这里着手,做了很多尝试全部都没有效果,然后痛定思痛,发现一个细节很奇怪,明明我的hibernate.cfg.xml中对dialect是有定义的,为什么报错提示dialect的设定为null?说明我的xml设定根本没有起效。
为了进一步验证我的猜想,我把hibernate.cfg.xml改成了123.cfg.xml ,结果报错一模一样,我就断定,是hibernate.cfg.xml文件没有被Hibernate加载导致的,解决方案也非常简单:
就是在Hibernate初始化的时候,指定hibernate.cfg.xml的文件名
//创建Configuration
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
//获取SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
然后问题就解决了,希望帮到遇到同样问题的朋友