异常信息:
Exception in thread "main" org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:409)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216)
at com.red.test.TestStudent.main(TestStudent.java:28)
功能代码:
1)java代码
Student st = new Student();
st.setGid(new Integer(4));
st.setName("likeqiang");
st.setSex("1");
st.setBirth(new Date());
Configuration cfg = new Configuration();
SessionFactory sf = cfg.buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(st);
session.getTransaction().commit();
session.close();
sf.close();
2)hibernate.cfg.xml配置文件
...
<!--配置SQLServer连接属性-->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:51472;databaseName=red</property>
<property name="connection.username">sa</property>
<property name="connection.password">123456</property>
...
问题分析:
在hibernate.cfg.xml文件中时配置了dialect的(见“hibernate.cfg.xml配置文件”红色部分代码),为什么还是报没有指定dialect的异常呢?
经过分析发现原来是在使用hibernate的时候,没有调用配置文件,导致系统不能读取dialect信息。
解决办法:
修改上面java代码,将
SessionFactory sf = cfg.buildSessionFactory();
改成
SessionFactory sf = cfg.configure().buildSessionFactory();
问题结论:
configure()方法默认会在classpath下寻找hibernate.cfg.xml文件,如果没有找到该文件,系统会报HibernateException,实际上我们还可以通过configure(Stringresource)来指定配置文件,通常我们都是采用的默认设置,所以直接使用configure()。
其实如果不适用configure()方法,这时hibernate会在classpath下寻找hibernate.properties文件,如果没有找到,系统将报HibernateException.