当'hibernate.dialect'未设置时,Hibernate 4对DialectResolutionInfo的访问不能为空 [英] Hibernate 4 Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

查看:103
本文介绍了当'hibernate.dialect'未设置时,Hibernate 4对DialectResolutionInfo的访问不能为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Hibernate最新版本 4.3.5.Final



我的 hibernate.cfg.xml 文件内容:

 <?xml version =1.0encoding = UTF-8 >?; 
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置DTD 3.0 // EN
http://hibernate.org/dtd/hibernate-configuration-3.0 .dtd>
< hibernate-configuration>
< session-factory>
< property name =hibernate.connection.driver_class> com.mysql.jdbc.Driver< / property>
< property name =hibernate.connection.url> jdbc:mysql:// localhost / Test< / property>
< property name =hibernate.connection.username> pankaj< / property>
< property name =hibernate.connection.password> xxxx< / property>
< property name =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / property>

< mapping resource =employee.hbm.xml/>
< / session-factory>

< / hibernate-configuration>

创建SessionFactory的工具类:

  package com.example; 
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
导入org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory(){
try {
//从hibernate.cfg.xml创建SessionFactory
Configuration configuration = new Configuration();
configuration.configure(hibernate.cfg.xml);
System.out.println(Hibernate Configuration loaded);

SessionFactory sessionFactory = configuration.buildSessionFactory(new StandardServiceRegistryBuilder()。build());

return sessionFactory;
}
catch(Throwable ex){
//确保您记录异常,因为它可能被吞噬
System.err.println(初始化SessionFactory创建失败。 + ex);
抛出新的ExceptionInInitializerError(ex);



public static SessionFactory getSessionFactory(){
return sessionFactory;


当我在 main()方法,我得到以下异常:

  2014年5月4日上午11:55 :56下午org.hibernate.cfg.Configuration doConfigure 
INFO:HHH000041:配置SessionFactory:null
Hibernate配置加载
2014年5月4日下午11:55:57 org.hibernate.engine。 jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN:HHH000181:假设应用程序将提供连接,则没有遇到适当的连接提供者
创建初始SessionFactory failed.org.hibernate.HibernateException:当访问DialectResolutionInfo时不能为null 'hibernate.dialect'未设置
线程main中的异常java.lang.ExceptionInInitializerError $ b $ com.example.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)$ b $ com com.example。 HibernateUtil。< clinit>(HibernateUtil.java:9)
at com.example.HibernateMain.main(HibernateMain。 java:26)
导致:org.hibernate.HibernateException:当'hibernate.dialect'没有在org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl中设置
时,DialectResolutionInfo的访问不能为null。 (org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
位于org.hibernate.engine.jdbc.internal。 JdbcServicesImpl.configure(JdbcServicesImpl.java:209)
位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl。初始化服务(AbstractServiceRegistryImpl.java:234)
在org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
在org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java: 1885年)
在org.hibernate.cfg.Configuration.buildS essionFactory(Configuration.java:1843)
at com.example.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
... 2 more

我已经尝试了很多选项并查找了在线资源,hibernate文档,但找不到这里缺少的内容。任何帮助表示赞赏。

解决方案

最后能够解决问题,问题出在 SessionFactory 正在创建中。



对于初学者来说,官方文档是第一个去的地方,我必须说Hibernate官方文档似乎没有随最新版本的变化而更新。 b
$ b

修正是将配置设置应用于 StandardServiceRegistryBuilder 实例。

  //从hibernate.cfg.xml创建SessionFactory 
Configuration configuration = new Configuration();
configuration.configure(hibernate.cfg.xml);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())。build();
SessionFactory sessionFactory =配置
.buildSessionFactory(serviceRegistry);

请参阅我的博客文章 here 获取更多详细信息。


I am using Hibernate latest version 4.3.5.Final.

My hibernate.cfg.xml file content:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/Test</property>
    <property name="hibernate.connection.username">pankaj</property>
    <property name="hibernate.connection.password">xxxx</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    <mapping resource="employee.hbm.xml"/>
</session-factory>

</hibernate-configuration>

Utility class to create SessionFactory:

package com.example;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configuration = new Configuration();
        configuration.configure("hibernate.cfg.xml");
        System.out.println("Hibernate Configuration loaded");

        SessionFactory sessionFactory = configuration.buildSessionFactory(new StandardServiceRegistryBuilder().build());

        return sessionFactory;
    }
    catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}

When I use it in my main() method, I get the following exception:

May 04, 2014 11:55:56 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Hibernate Configuration loaded
May 04, 2014 11:55:57 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
Initial SessionFactory creation failed.org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.example.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
    at com.example.HibernateUtil.<clinit>(HibernateUtil.java:9)
    at com.example.HibernateMain.main(HibernateMain.java:26)
Caused by: 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:1885)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
    at com.example.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
    ... 2 more

I have tried so many options and looked for online resources, hibernate docs but couldn't find what is missing here. Any help is appreciated.

解决方案

Finally able to fix the issue, the issue is with the way SessionFactory is getting created.

For a starter, official document is the first place to go and I must say that Hibernate official documentation seems to be not update with latest version changes.

Fix is to apply the configuration settings to StandardServiceRegistryBuilder instance.

// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration
        .buildSessionFactory(serviceRegistry);

Please refer my blog post here for more details.

这篇关于当'hibernate.dialect'未设置时,Hibernate 4对DialectResolutionInfo的访问不能为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆