2014-09-24 101 views
0

我有一個使用Spring Data JPA的webapp。我創建了一些爲一些實體擴展JpaRepository的存儲庫。但是當我嘗試部署應用程序時,我收到以下錯誤。不知道爲什麼它扔了錯誤創建JpaRepository時出錯

應用程序錯誤日誌:

ERROR org.springframework.web.context.ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactoryTest' defined in file [C:\Tomcat\apache-tomcat-7.0.53-internal\webapps\appTest\WEB-INF\classes\applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
..... 
at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.NullPointerException 
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1456) 
at org.hibernate.cfg.annotations.CollectionBinder.bindOneToManySecondPass(CollectionBinder.java:864) 
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:779) 
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:728) 
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70) 
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1695) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150) 
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) 
... 25 more 

的pom.xml

<properties> 
    <spring.framework.version>4.0.6.RELEASE</spring.framework.version> 
    <spring-data-jpa>1.6.1.RELEASE</spring-data-jpa> 

    <hibernate-core>4.3.4.Final</hibernate-core> 
    <hibernate-validator>5.1.0.Final</hibernate-validator> 
    <hibernate-entitymanager>4.3.4.Final</hibernate-entitymanager> 
</properties> 

.... 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-oxm</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jms</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>${spring-data-jpa}</version> 
    </dependency> 

    <dependency> 
     <groupId>net.sourceforge.jtds</groupId> 
     <artifactId>jtds</artifactId> 
     <version>${jtds}</version> 
    </dependency> 

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

的applicationContext.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
xmlns:task="http://www.springframework.org/schema/task" 
xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd"> 

<context:component-scan base-package="uk.ac.universityName" /> 

<jpa:repositories base-package="uk.ac.universityName.dao.etocbrs" 
    entity-manager-factory-ref="entityManagerFactoryTest" 
    transaction-manager-ref="transactionManagerEtocBrs" /> 

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<!-- ETOC_BRS JPA Entity Manager Factory --> 
<bean id="entityManagerFactoryTest" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="persistenceUnitEtocBrs"/> 
    <property name="dataSource" ref="dataSourceEtocBrs"/> 
    <property name="persistenceProviderClass" value="org.hibernate.jpa.HibernatePersistenceProvider"/> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> 
      <prop key="hibernate.connection.charSet">UTF-8</prop>    
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
</bean> 

...... 

的persistence.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns /persistence/persistence_2_0.xsd" 
version="2.0"> 

<persistence-unit name="persistenceUnitEtocBrs" /> 

<persistence-unit name="persistenceUnitEtocAdmin" /> 

</persistence> 

JpaRepository接口

import org.springframework.data.domain.Pageable; 
import org.springframework.data.jpa.repository.Query; 

import org.springframework.data.jpa.repository.JpaRepository; 

import uk.ac.universityName.model.etocbrs.Item; 

public interface ItemRepository extends JpaRepository<Item, Long> { 

    @Query("SELECT e FROM Item e") 
    List<Item> findUnprocessed(Pageable pageable); 
} 
+0

你是hibernate的依賴關係嗎? – Koitoer 2014-09-24 17:32:22

+0

我已經更新了,歡呼聲。 – user292049 2014-09-24 17:35:59

+0

我相信Item類與其他類有某種關係,你有沒有映射到persistence.xml文件中? – Koitoer 2014-09-24 17:41:49

回答

0

這是我的建議,似乎春天不能實例EntityManager的,所以請儘量使用你的persistence.xml如下。

<persistence-unit name="persistenceUnitEtocBrs" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>where.your.item.class.is.Item</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="validate" /> 
     <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" /> 
     <property name="hibernate.connection.charSet" value="UTF-8" /> 
     <property name="hibernate.show_sql" value="false" /> 
    </properties> 
</persistence-unit> 

另外我不確定你是否需要爲spring4.0做一些不同的工作。

<spring.data.version>1.3.1.RELEASE</spring.data.version> 
<spring.version>3.2.5.RELEASE</spring.version> 
<hibernate.version>4.2.0.Final</hibernate.version> 
0

在實體clasess中有一些錯誤,我通過它們之間的正確映射來修復它。