2017-02-28 28 views
0

我一定做错了什么。我从几个小时开始看,但我找不到我的问题。我试图为我的entityManager使用@PersistenceContext,但我得到的是一个nullPointerException。Hibernate:nullPointerException在我的entityManager与@PersistenceContext

这里是我的类和方法,在那里我得到的错误:

@Repository 
public class ApplicationDao extends Dao 
{ 
    @PersistenceContext 
    private EntityManager entityManager; 

    [...] 

    public ArrayList<Application> getListApplication() { 

     Session session = entityManager.unwrap(Session.class); 

     [...] 

    } 

    [...] 
} 

也许是我的Spring配置,因为当我加载我的项目,但它从来没有引起任何问题,我有很长时间以来这个错误

SEVERE: Spring context lookup failed, skipping spring component provider initialization. 

我的配置文件:

的src /主/资源/ applicationContext.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:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <tx:annotation-driven /> 

    <context:component-scan base-package="com.calamar.beans" /> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="url" /> 
    <property name="username" value="calamar" /> 
    <property name="password" value="calamar" /> 
    </bean> 

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

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="calamar" /> 
    <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 


</beans> 

的src /主/资源/ persistence.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 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"> 
    <persistence-unit name="calamar" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.calamar.beans.Application</class> 
     <class>com.calamar.beans.Derogation</class> 
     <class>com.calamar.beans.DerogationFille</class> 
     <class>com.calamar.beans.DerogationAutre</class> 
     <class>com.calamar.beans.DerogationLinux</class> 
     <class>com.calamar.beans.DerogationOracle</class> 
     <class>com.calamar.beans.MatriculeUser</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
      <property name="hibernate.id.new_generator_mappings" value="false"/> 
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> 
      <property name="hibernate.connection.url" value="myUrl"/> 
      <property name="hibernate.connection.username" value="myUsername"/> 
      <property name="hibernate.connection.password" value="myPassword"/> 
      <property name="hibernate.default_schema" value="calamarantoine"/> 

      <!-- Permet de reduire le temps de lancement de entityManagerFactory --> 
      <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" /> 

     </properties> 


    </persistence-unit> 
</persistence> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>/*Company group id*/</groupId> 
    <artifactId>calamar</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>calamar Maven Webapp</name> 
    <url>http://maven.apache.org</url> 


    <parent> 
     //Company parent group 
    </parent> 


    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <!-- Import dependency management from Spring Boot --> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-parent</artifactId> 
       <version>1.4.2.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 


    <dependencies> 

     <!-- Jsp : Jstl --> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- Servlet api --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 

     <!-- Spring boot web--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <!-- Spring boot test--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <!-- Spring boot jpa --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <!-- Spring jersey --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jersey</artifactId> 
     </dependency> 

     <!-- PostgreSQL & Oracle --> 
     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901.jdbc4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc14</artifactId> 
      <version>10.2.0.3.0</version> 
     </dependency> 

     <!-- Log4j --> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 

     <!-- Gson --> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.3.1</version> 
     </dependency> 

     <!-- company dependencies --> 

    </dependencies> 

    <build> 
     <finalName>calamar</finalName> 
     <plugins> 
      <!-- Maven compiler with java 1.8 --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Calamar</display-name> 
    <display-name>Calamar</display-name> 
    <filter> 
     //Company filter 
    </filter> 
    <filter-mapping> 
     //[...] 
    </filter-mapping> 

    <listener> 
     <listener-class> 
      org.springframework.web.context.request.RequestContextListener 
     </listener-class> 
    </listener> 

    //Servlets 
</web-app> 

感谢您抽出时间来帮助我。

+0

你可以添加你的配置吗? – niekname

+0

我将我的配置文件添加到帖子中。 (对不起,如果我很长时间回应) –

回答

0

正如你所看到的错误,问题在于Spring配置,而不是休眠。

+0

我将我的配置文件添加到第一篇文章,所以你可以帮我找到为什么我得到这个错误。 (对不起,如果我很长时间回应) –

+0

我建议从xml配置切换到java配置。你的配置看起来不错,但它可能有一个错误,在使用xml时很难调试。如果您可以切换到Java,则可以更快地找到问题的位置。欢呼 –

+0

只切换applicationContext.xml和保持web.xml persistence.xml和pom.xml一样吗? –

0

下面的配置适用于我。你可以检查它。出于某种原因,持久性上下文不会在您的情况下注入。

<tx:annotation-driven transaction-manager="transactionManager"/>     
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/> 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="myDs"/>  
</bean> 

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="showSql" value="true"/> 
    <property name="generateDdl" value="true"/> 
    <property name="database" value="ORACLE"/> 

</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="myDs"/> 
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
    <!-- spring based scanning for entity classes--> 
    <property name="packagesToScan" value="com.vimal.ecommerce.domain"/> 
</bean> 
相关问题