복붙노트

[SPRING] 'hibernate.dialect'가 설정되어 있지 않으면 Connection은 null이 될 수 없다.

SPRING

'hibernate.dialect'가 설정되어 있지 않으면 Connection은 null이 될 수 없다.

이번에는 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은 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.springframework.beans.factory.support.DefaultListableBeanFactory@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]

해결법

  1. ==============================

    1.데이터베이스 연결이 누락되었습니다. hibernate.cfg.xml 파일에 다음과 같은 라인을 추가하십시오.

    데이터베이스 연결이 누락되었습니다. 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_로 시작하는 값을 설정하십시오.)

  2. ==============================

    2.나는 똑같은 문제가 있었다. Apache Commons DataSource에서 전환 :

    나는 똑같은 문제가 있었다. 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>
    

    X10 :

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

    내 문제가 사라졌다. 어쩌면 누군가가 왜 그런지 설명 할 수 있고, 나는 그게 효과적이며, 내가 아는 것을 공유하고 싶다. :)

  3. ==============================

    3.난 당신의 응용 프로그램에서 hibernate.cfg.xml 파일을로드하지 않는 문제라고 생각합니다.

    난 당신의 응용 프로그램에서 hibernate.cfg.xml 파일을로드하지 않는 문제라고 생각합니다.

    나는 똑같은 문제가있다. 내 프로젝트에서 다음 코드를 시도했다 :

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

    그런 다음 잘 작동합니다. 희망이 도움이 될 것입니다.

  4. ==============================

    4.나는 당신이 hibernate와 InnoDB를 사용하고 왜 hibernate.dialect를 org.hibernate.dialect.MySQL5 나 org.hibernate.dialect.MySQL로 설정하지 않는가?

    나는 당신이 hibernate와 InnoDB를 사용하고 왜 hibernate.dialect를 org.hibernate.dialect.MySQL5 나 org.hibernate.dialect.MySQL로 설정하지 않는가?

    연결 속성은 hibernate.connection.url이다.

  5. ==============================

    5.난 당신이 구성 hibernate.cfg.xml 생각하지 않습니다.

    난 당신이 구성 hibernate.cfg.xml 생각하지 않습니다.

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

    6.귀하의 datasource-config.xml 클래스 경로에없는 것 같아요.

    귀하의 datasource-config.xml 클래스 경로에없는 것 같아요.

    WEB-INF / datasource-config.xml에이 파일을 저장하는 대신

    WEB-INF / classes / datasource-config.xml에 복사하십시오.

  7. ==============================

    7.세션 팩토리 초기화 코드를 게시하지 않았습니다. 하지만이게이 문제와 같은 문제라고 생각합니다.

    세션 팩토리 초기화 코드를 게시하지 않았습니다. 하지만이게이 문제와 같은 문제라고 생각합니다.

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

    코드를 다시 확인하십시오.

  8. ==============================

    8.나는 당신이 아래와 같은 Configuration을 생성하지 않는다고 생각한다.

    나는 당신이 아래와 같은 Configuration을 생성하지 않는다고 생각한다.

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

    베스트

  9. ==============================

    9.나는 당신이 다음과 같이 Configuration Object를 생성 한 후에 hibernate.cfg.xml 파일을 언로드함으로써 발생하는 에러라고 생각한다.

    나는 당신이 다음과 같이 Configuration Object를 생성 한 후에 hibernate.cfg.xml 파일을 언로드함으로써 발생하는 에러라고 생각한다.

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

    10.나는 동일한 문제가 있었는데 문제는 내 컴퓨터가 클라이언트 (IP 주소)가 데이터베이스와 통신 할 수 있도록 허용하는 postgres 데이터베이스의 pg_hba.conf에 입력되지 않았다는 것입니다.

    나는 동일한 문제가 있었는데 문제는 내 컴퓨터가 클라이언트 (IP 주소)가 데이터베이스와 통신 할 수 있도록 허용하는 postgres 데이터베이스의 pg_hba.conf에 입력되지 않았다는 것입니다.

    btw : 다른 사용자는 데이터베이스 서비스를 로컬에서 시작하는 것을 잊어 버리면 오류가 발생 함을 알립니다.

  11. ==============================

    11.ServiceRegistry 인스턴스를 별도로 생성하여 buildSessionFactory에 전달하면이 오류가 발생할 수 있습니다. 다음과 같이 SessionFactory 인스턴스를 생성하십시오.

    ServiceRegistry 인스턴스를 별도로 생성하여 buildSessionFactory에 전달하면이 오류가 발생할 수 있습니다. 다음과 같이 SessionFactory 인스턴스를 생성하십시오.

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

    12.이 문제는 mysql-connector 버전과 mysql-installer 버전이 다른 경우에 발생합니다.

    이 문제는 mysql-connector 버전과 mysql-installer 버전이 다른 경우에 발생합니다.

    내부적으로 그것은 던질 것이다 원인 :

    그래서 당신은 mysql-connector 버전과 mysql-installer 버전을 동일하게 만들어야한다.

  13. from https://stackoverflow.com/questions/11211451/connection-cannot-be-null-when-hibernate-dialect-not-set by cc-by-sa and MIT license