2012-06-26 4 views
17

имеет больше проблем с настройкой спящего режима с пружиной3. на этот раз он говорит, что соединение является nul, поскольку диалект не установлен, который находится в моем файле hibernate.cfg.xml.Соединение не может быть пустым, когда «hibernate.dialect» не установлен

здесь является полное исключение:

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 Thats етсь вверх по SessionFactory

<?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.s[email protected]4f549ceb: 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] 
+0

я не думаю, что и может отлаживать файл XML. Я попытался отлаживать фактический Java-код, но он никогда не достигает его, поскольку он все еще пытается организовать компоненты и свой прикладной контекст. – jonney

+0

Spring и Hibernate также написаны в «реальном Java-коде». Стектура показывает, какие классы и методы участвуют в создании SessionFactory. Просто установите несколько точек останова, чтобы выяснить, где все происходит неправильно? – meriton

+0

Извините, но u cant debug libs, если вы не импортируете весь проект класса lib в свой проект. такие вещи, как «org.springframework.beans.factory», не могут быть отлажены через библиотеки. – jonney

ответ

5

Отсутствует соединение с базой данных. Добавить в свой 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_ в моем примере).

+0

Хорошо круто. У меня были свойства, определенные в файле .properties. это неправильно? Кроме того, соединения с базой данных определены на одном из моих компонентов, называемом datasource – jonney

+0

Hibernate использует разные свойства, чем вы (Hibernate использует 'connection.url', вы используете' database.url'). Является ли ваш файл свойств, возможно, для jdbc или для весны (я не хорош с весной) ?. Я думаю, что смешивание этих двух типов файлов конфигурации является проблемой, потому что тогда Hibernate видит только половину из них. – Johanna

+0

его для весны. i hvae последовал за руководством для весны + спящий режим, который имеет точно такую ​​же настройку, а также читает весну в книге действий, в которой используется компонент dataSource, который подключается к sessionFactory bean. это то, что я пытаюсь сделать.для разделения конфигурации источника данных и hibernate, чтобы я мог создавать пользовательские цели сборки, которые автоматически собираются и выгружают соответствующие настройки базы данных/hbernate, основанные на enviornment. Я буду строить apon – jonney

1

Я думаю, что ваш datasource-config.xml не в пути к классам

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

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

+0

добавил новую информацию о трассировке стека – jonney

+0

Пароль, указанный вами в файле свойств, неверен. Я думаю, что ранее проблема была решена. –

+0

Я дважды проверил пароль и его правильно. очевидно, я не опубликовал реальный пароль в этом фрагменте кода, но пароль, который я использую для входа через cmd, работает для пользователя root, и я установил один и тот же пароль в свойствах и файл hibernate.cfg – jonney

1

I вы используете спящий режим и InnoDB почему вы не установили hibernate.dialect до org.hibernate.dialect.MySQL5 или org.hibernate.dialect.MySQL.

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

+0

им не использовал InnoDB. просто используя стандартный mysql5. Также установлен hibernate.connection.url: jdbc: mysql: // localhost: 3306/свобода – jonney

+0

, но свойство connection.url. – ssedano

+0

ах, я вижу, что значит у. я просто изменил его и не решил проблему. проблема с диалектом не установлена – jonney

2

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

<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> 

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

1

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

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

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

От 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

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

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

Лучшие

0

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

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

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

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

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

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

0

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

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

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

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

Смежные вопросы