2014-02-17 58 views
0

嗨,感謝您閱讀我的問題。BeanCreationException of org.springframework.orm.hibernate4.LocalSessionFactoryBean

我正在寫一個簡單的程序來管理用戶,汽車,付款..在車庫裏。這是一個maven項目,我使用spring和hibernate的sqlite。 我這個迷途時EXCETION我嘗試只是爲了exetuce我aplication的基本測試

java.lang.IllegalStateException: Failed to load ApplicationContext 
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:313) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
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.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clienteDao': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory Modelo.GenericDaoHibernate.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [spring-config.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:106) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:57) 
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124) 
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148) 
... 24 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory Modelo.GenericDaoHibernate.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [spring-config.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) 
... 40 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [spring-config.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:910) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:853) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486) 
... 42 more 
Caused by: java.lang.NullPointerException 
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:396) 
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117) 
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1596) 
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1519) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
... 52 more 

我讓你在這裏,我在這裏POM:

<groupId>abegondo.taller</groupId> 
    <artifactId>taller</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>taller</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

<!-- Versions --> 
    <spring.version>3.2.3.RELEASE</spring.version> 
    <hibernate.version>4.3.0.Final</hibernate.version> 
    <junit.version>4.8.1</junit.version> 
    <sqlite.version>3.7.15-M1</sqlite.version> 

<!-- Hibernate properties --> 
    <hibernate.show_sql>true</hibernate.show_sql> 
    <hibernate.format_sql>true</hibernate.format_sql> 
    <hibernate.use_sql_comments>true</hibernate.use_sql_comments> 

<dataSource.url>jdbc:sqlite:taller</dataSource.url> 
<testDataSource.url>jdbc:sqlite:taller</testDataSource.url>   
    </properties> 
<repositories> 

<repository> 
<id>hibernatesqlite-maven</id> 
<url>https://hibernate-sqlite.googlecode.com/svn/trunk/mavenrepo</url> 
    </repository> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
</repository> 

</repositories> 
    <dependencies> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
</dependency> 

<!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>3.2.0.RELEASE</version> 
     <scope>test</scope> 
     <type>jar</type> 
    </dependency> 
<!-- JUnit --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 

<!-- Hibernate --> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>${hibernate.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.xerial</groupId> 
    <artifactId>sqlite-jdbc</artifactId> 
    <version>${sqlite.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.5.2</version> 
</dependency> 
<dependency> 
    <groupId>javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.4.GA</version> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>javax.persistence</groupId> 
    <artifactId>persistence-api</artifactId> 
    <version>1.0.2</version> 
    <scope>provided</scope> 
</dependency> 

<!-- Others --> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
    </dependency> 

    </dependencies> 

    <profiles> 
    <profile> 
     <id>sqlite</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <!-- JDBC driver properties --> 
      <jdbcDriver.groupId>org.xerial</jdbcDriver.groupId> 
      <jdbcDriver.artifactId>sqlite</jdbcDriver.artifactId> 
      <jdbcDriver.version>${sqlite.version}</jdbcDriver.version> 
      <jdbcDriver.className>org.sqlite.JDBC</jdbcDriver.className> 

      <!-- Data source properties --> 
      <dataSource.url>jdbc:sqlite:taller</dataSource.url> 
      <testDataSource.url>jdbc:sqlite:taller</testDataSource.url>    <dataSource.createTablesScript>src/main/resources/CreateTables.sql</dataSource.createTablesScript> 
      <!-- Hibernate properties --> 
      <hibernate.dialect>Modelo.SQLiteDialect</hibernate.dialect> 
     </properties> 
    </profile> 
    </profiles> 

    <build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>sql-maven-plugin</artifactId> 
      <version>1.5</version> 
      <dependencies> 
       <dependency> 
        <groupId>${jdbcDriver.groupId}</groupId> 
        <artifactId>${jdbcDriver.artifactId}</artifactId> 
        <version>${jdbcDriver.version}</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <driver>${jdbcDriver.className}</driver> 
       <username>${dataSource.user}</username> 
       <password>${dataSource.password}</password> 
       <srcFiles> 
        <srcFile>${dataSource.createTablesScript}</srcFile> 
       </srcFiles> 
      </configuration> 
      <executions> 
       <!-- The default sql:execute creates the production db --> 
       <execution> 
        <id>default-cli</id> 
        <phase>process-sources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <url>${dataSource.url}</url> 
        </configuration> 
       </execution> 
       <execution> 
        <id>create-test-db</id> 
        <phase>process-sources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <url>${testDataSource.url}</url> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>es.udc.protoduction.Sprodion</mainClass> 
      </configuration> 
     </plugin> 

    </plugins> 
    </pluginManagement> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

    <testResources> 
     <testResource> 
      <directory>src/test/resources</directory> 
      <filtering>true</filtering> 
     </testResource> 
    </testResources> 
    </build> 

</project> 

我休眠-conf.xml中:

<hibernate-configuration> 

<session-factory> 

    <!-- Show and print SQL on stdout --> 
    <property name="hibernate.show_sql">${hibernate.show_sql}</property> 
    <property name="hibernate.format_sql">${hibernate.format_sql}</property> 
    <property name="hibernate.use_sql_comments">${hibernate.use_sql_comments}</property> 
    <property name="hibernate.dialect">Modelo.SQLiteDialect</property> 

    <mapping class="Modelo.Entidades.Cliente"/> 
    <mapping class="Modelo.Entidades.Coche"/> 
    <mapping class="Modelo.Entidades.Factura"/> 
    <mapping class="Modelo.Entidades.LineaFactura"/> 
    <mapping class="Modelo.Entidades.Pieza"/> 
</session-factory> 

</hibernate-configuration> 

我的Spring配置:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.2.xsd " > 
    <context:annotation-config/> 
<context:component-scan base-package="Modelo"/> 

<bean id="jdbcDataSource3" class="org.apache.commons.dbcp.BasicDataSource" destroy-  method="close" lazy-init="true"> 
<property name="driverClassName" value="org.sqlite.JDBC" /> 
<property name="url" value="jdbc:sqlite:taller" /> 
<property name="initialSize" value="2" /> 
<property name="maxActive" value="20" /> 
<property name="maxIdle" value="5" /> 
<property name="poolPreparedStatements" value="true" /> 
</bean> 

<!-- Hibernate Session Factory --> 
<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="jdbcDataSource3"/> 
    <property name="configLocation" value="hibernate-config.xml"/> 
</bean> 

<!-- Hibernate Transaction Manager --> 
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mySessionFactory"/> 
</bean> 

<!-- Activates annotation based transaction management --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 
</beans> 

任何想法爲什麼可以拋出這個異常?

+0

嘗試' Jaiwo99

+1

你可以發佈你的實際測試代碼嗎?您需要將Spring特定的配置註釋添加到您的測試中 - 這不會告訴您是添加了它們還是錯誤地添加了它們。 – Prancer

回答

0

嗨,我解決了這個問題,很抱歉在這裏回答遲到。 我有一個註解錯誤,我在Set字段中寫入@Id而不是實體的正確ID

相關問題