“org.hibernate.HibernateException: Hibernate Dialect must be explicitly set” 异常解决

异常信息:

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)

 

功能代码:

 1java代码

  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();


 

  2hibernate.cfg.xml配置文件

      ...
      
      org.hibernate.dialect.SQLServerDialect
      com.microsoft.sqlserver.jdbc.SQLServerDriver
      jdbc:sqlserver://localhost:51472;databaseName=red
      sa
      123456
     ...

 

问题分析:

        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.

你可能感兴趣的:(Hibernate)