it-swarm.com.ru

Соединение не может быть пустым, если не задан файл hibernate.dialect.

возникли проблемы с настройкой спящего режима с помощью Spring3. на этот раз говорится, что соединение не установлено, так как не установлен диалект, как в моем файле hibernate.cfg.xml.

вот полное исключение:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in URL [file:war/WEB-INF/datasource-config.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:567)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:464)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.Java:96)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.Java:44)
    at org.springframework.test.context.TestContext.buildApplicationContext(TestContext.Java:198)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.Java:233)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.Java:126)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.Java:85)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.Java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.Java:95)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.Java:139)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.Java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.Java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.Java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.Java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.Java:42)
    at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
    at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.Java:97)
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.Java:67)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:172)
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:75)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:159)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:131)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.Java:71)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.Java:2270)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.Java:2266)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1735)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.Java:184)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.Java:314)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.Java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1452)
    ... 29 more

Вот мой dataSource-config.xml, который устанавливает сессионный завод

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
      ">


    <bean id="myDataSource" class="org.Apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password} " />
    </bean>

    <bean id="mySessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="packagesToScan" value="com.jr.freedom"/>
        <property name="hibernateProperties" value="classpath:hibernate.cfg.xml"/>

    </bean>

    <!-- Declare a transaction manager -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"
        p:sessionFactory-ref="mySessionFactory" />

</beans>

И ниже файл hibernate.cfg.xml

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- JDBC connection settings -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/freedom</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>

        <!-- JDBC connection pool, use Hibernate internal connection pool -->
        <property name="connection.pool_size">25</property>

        <!-- Defines the SQL dialect used in Hiberante's application -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Display and format all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <!-- Mapping to hibernate mapping files -->
        <!--mapping resource="org/kodejava/example/hibernate/app/Label.hbm.xml"/-->
    </session-factory>
</hibernate-configuration>

Как видите, диалект устанавливается.

Правка: мой файл database.properties

    # DB properties file

database.url=jdbc:mysql://localhost:3306/freedom
database.driver=com.mysql.jdbc.Driver
database.user=root
database.password=password
database.maxConnections=25

Правка: вот полный след стека. доступ к базе данных может быть проблемой, но я могу успешно получить доступ к ней через командную строку?

   2288 [main] WARN  org.hibernate.engine.jdbc.internal.JdbcServicesImpl  - HHH000342: Could not obtain connection to query metadata : Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password: YES))
2289 [main] INFO  org.springframework.beans.factory.support.DefaultListableBeanFactory  - Destroying singletons in org.springframework.beans.factor[email protected]: defining beans [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.web.servlet.config.viewControllerHandlerMapping,userService,myDataSource,mySessionFactory,transactionManager,propertyConfigurer,org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0,viewResolver,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0,hello,userController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
2289 [main] DEBUG org.springframework.beans.factory.support.DisposableBeanAdapter  - Invoking destroy method 'close' on bean with name 'myDataSource'
2289 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory  - Retrieved dependent beans for bean '(inner bean)#14': [org.springframework.web.servlet.config.viewControllerHandlerMapping]
2289 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory  - Retrieved dependent beans for bean '(inner bean)#8': [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0]
2289 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory  - Retrieved dependent beans for bean '(inner bean)#1': [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0]
2290 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory  - Retrieved dependent beans for bean '(inner bean)': [org.springframework.web.servlet.handler.MappedInterceptor#0]
20
jonney

Соединение с базой данных отсутствует. Добавьте в свой файл hibernate.cfg.xml такие строки

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">
    jdbc:mysql://localhost:3306/your_database
</property>
<property name="connection.username">your_user</property>
<property name="connection.password">your_password</property>

(замените localhost, если база данных не установлена ​​на вашем компьютере, и установите значения, начинающиеся с your_ в моем примере).

7
Johanna

У меня такая же проблема. Переключение с источника данных Apache Commons:

<bean id="myDataSource" class="org.Apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.user}" />
    <property name="password" value="${database.password} " />
</bean>

К C3P0:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUrl" value="jdbc:mysql://ipadress:3306/schema" />
    <property name="user" value="root" />
    <property name="password" value="abc" />
</bean>

заставил мою проблему уйти. Может быть, кто-то может объяснить, почему, я просто счастлив, что это работает, и хочу поделиться тем, что мало знаю :)

2
Jonas Eicher

Я думаю, что проблема заключается не в загрузке вашего файла hibernate.cfg.xml в ваше приложение.

У меня тоже такая же проблема. Я попытался с помощью следующего кода в моем проекте:

Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");

Тогда это сработало нормально. Надеюсь, это поможет.

2
BALA

Я думаю, что ваш datasource-config.xml не в classpath

вместо того, чтобы этот файл в WEB-INF/datasource-config.xml

скопируйте его в WEB-INF/classes/datasource-config.xml

1
Rahul Agrawal

я думаю, что вы не настроены hibernate.cfg.xml.

Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
SessionFactory factory = configuration.buildSessionFactory();
1
manoj

Если вы используете Hibernate и InnoDB, почему бы вам не установить hibernate.dialect в org.hibernate.dialect.MySQL5 или org.hibernate.dialect.MySQL.

и свойство соединения с hibernate.connection.url.

1
ssedano

Вы не опубликовали свой код инициализации фабричной сессии. Но я думаю, что это та же проблема с этот

Начиная с Hibernate 4.3.2.Final, представлен StandardServiceRegistryBuilder. Пожалуйста, следуйте этому порядку для инициализации, например:

Configuration configuration = new Configuration();
configuration.configure("com/jeecourse/config/hibernate.cfg.xml");

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
        configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

Пожалуйста, проверьте ваш код дважды.

0
Jimmy

Создание экземпляра ServiceRegistry отдельно и передача его buildSessionFactory может привести к этой ошибке. Попробуйте создать экземпляр SessionFactory следующим образом:

private static SessionFactory factory;
factory = cfg.buildSessionFactory(
          new ServiceRegistryBuilder().applySettings(cfg.getProperties())
         .buildServiceRegistry());
0
Ram

Эта проблема возникает, если ваша версия mysql-connector и версия mysql-installer отличаются. 

Внутренне это выкинет. 

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотреть возможность обновления клиента MySQL.

Так что вам нужно сделать версию MySQL-коннектора и MySQL-инсталлятора одинаковыми ...

0
nachit shah

Я думаю, что ошибка вызвана выгрузкой файла hibernate.cfg.xml после того, как вы создали объект конфигурации следующим образом:

Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
0
xiaofeiyu

Я думаю, что вы не создаете конфигурацию, как показано ниже. 

Configuration conf = new Configuration().configure();

Лучший

0
jsina

У меня была та же проблема, и проблема заключалась в том, что мой компьютер не был введен в файл pg_hba.conf базы данных postgres, который позволяет клиентам (IP-адресам) разрешать общение с базой данных. 

кстати: другие пользователи говорят, что ошибка возникает, если они просто забывают запустить службу базы данных локально

0
flipperweid