`

Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

阅读更多

最近突然想回顾下Hibernate的一些常用操作,于是去网上下载了最新的hibernate版本包,于是把原来练习的代码拿出来运行,结果就发现buildSessionFactory这个方法hibernate的最新版本已经不推荐使用了,于是利用开发工具的提示功能,发现有一个对应的重载方法,于是拿出来使用。

代码如下(new StandardServiceRegistryBuilder().build()是在官方文档中找到的):

 

public static void main(String[] args) {
		Configuration cfg = new Configuration();
		cfg.configure("/hibernate.cfg.xml");// 加载配置信息

		SessionFactory factory = cfg
				.buildSessionFactory(new StandardServiceRegistryBuilder()
						.build());

		Session session = factory.getCurrentSession();

		Student stu = new Student(1, "student01", "male");

		Transaction tr = session.getTransaction();
		
		try {
			tr.begin();
			session.save(stu);
			tr.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tr.rollback();
		} finally {
			session.close();//此处如果外面获取的session用getCurrentSession()获取时则需要进行判断session是否已经关闭了,但是如果是openSession()获取的session的话,就不用判空了,因为他是没有关闭的。需要手动关闭。
		}
	}

 

发现废弃的告警已经消除了,好了,直接运行之后就发现出问题了。报了如下异常信息:

 

Exception in thread "main" org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
	at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
	at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:209)
	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
	at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
	at com.fit.method.TestSaveOrUpdateMethod.main(TestSaveOrUpdateMethod.java:18)

 

 

 

但是在方言在hibernate.cfg.xml文件中已经配置了,如下配置,但是为什么还是报呢。

 

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
	<!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">mb</property>
    <!-- SQL dialect(方言) -->
    <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>
    <property name="current_session_context_class">thread</property>
    <mapping resource="com/fit/entity/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration
>

 

 

官方文档上也没搜索到,于是百度搜索了下,才发现少调用了一句话。

		SessionFactory factory = cfg
				.buildSessionFactory(new StandardServiceRegistryBuilder()
						.applySettings(cfg.getProperties()).build());

 

必须要把cfg中配置再向里面传递一次才可以。再次运行代码OK了。

 

PS:只能说一句,官方的文档也是过时了呀(网上很多人也在抱怨这个问题),用发布的最新的包中的文档里面的示例代码都不能运行成功,大公司也不一定那么权威么。。。

 

 

 

 

分享到:
评论

相关推荐

    Hibernate连接SQLite配置说明和方言代码

    1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将“hibernate\hibernate.cfg.xml”拷贝到“\WEB-INF\classes”...

    hibernate.properties

    hibernate.dialect org.hibernate.dialect.HSQLDialect hibernate.connection.driver_class org.hsqldb.jdbcDriver hibernate.connection.username sa hibernate.connection.password hibernate.connection.url jdbc...

    kingbase8-Finaldialect-5.2.17.jar

    亲测可以使用kingbase8-Finaldialect-5.2.17.jar kingbase8-8.2.0.jar

    hibernate3.6.0dialect.jar

    hibernate3.6.0dialect.jar

    hibernate SQLServer2008Dialect

    SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)

    数据库连接字符串

    oracle连接字符串: class:oracle.jdbc.driver.OracleDriver url:"jdbc:oracle:thin:@localhost:1521:jbitdb","epet","epet" sqlserver: ...url:"jdbc:sqlserver:/...Firebird org.hibernate.dialect.FirebirdDialect

    GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    南大通用GBase数据库GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    hibernate3dialect

    hibernate3dialect

    优化Hibernate性能的几点建议

    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect <prop key="hibernate.show_sql">false !-- Create/update the database tables automatically when the JVM starts up <prop key="...

    hibernate-4.3.11finaldialect.jar

    Hibernate人大金仓jar包

    hibernate用法

    hibernate.dialect = org.hibernate.dialect.MySQLDialect //指定数据库使用的sql方言(oracle、mysql) hibernate.connection.driver_class=com.mysql.jdbc.Driver //指定数据库的驱动程序 hibernate.connection....

    hibernate4.0使用二级缓存jar包

    &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory 3.3配置如下: &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;property name="cache...

    kingbasehibernate3.3.2dialect.jar

    hibernate下的kingbase的jar文件,需要的同学自行下载

    javaee 书上的Customer程序

    hibernate.dialect=org.hibernate.dialect.SQLServerDialect hibernate.connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver hibernate.connection.url=jdbc\:sqlserver\://localhost\:1433;...

    bbs-cs 天乙社区 v6.0.1(含源码)

    hibernate.dialect=net.sf.hibernate.dialect.OracleDialect 如果是Oracle9,写 hibernate.dialect=net.sf.hibernate.dialect.Oracle9Dialect 注意社区提供的是For Oracle8.1.7的JDBC驱动,如果使用Oracle9,需要...

    Hibernate开发jar包

    &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect &lt;!-- 可选配置 --&gt; &lt;property name="hibernate.show_sql"&gt;true &lt;property name="hibernate.format_sql"&gt;true ...

    数据库JDBC连接.txt

    #hibernate.dialect org.hibernate.dialect.MySQLDialect #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect #hibernate.connection....

    Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法

    1.Caused by: org.hibernate.HibernateException: Connection cannot be null when ‘hibernate.dialect’ not set 报错就配置吧 启动项目不报错了,但是访问项目报错了 2.访问报错...

    实验室排课系统.rar

    org.hibernate.dialect.MySQLDialect &lt;value&gt;vo/Users.hbm.xml &lt;value&gt;vo/Firstdate.hbm.xml &lt;value&gt;vo/Arrangement.hbm.xml&lt;/value&gt;&lt;/list&gt; &lt;/property&gt;

    hibernate5.2.0源码

    hibernate5.2.0源码

Global site tag (gtag.js) - Google Analytics