Hibernate:我的entityManager上的@PersistenceContext的nullPointerException

时间:2017-02-28 13:58:55

标签: java spring hibernate

我一定做错了。我正在寻找几个小时,但我找不到我的问题。我正在尝试将@PersistenceContext用于我的entityManager,但我得到的只是一个nullPointerException。

这是我的类和我得到错误的方法:

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

感谢您花时间帮助我。

2 个答案:

答案 0 :(得分:0)

正如您可以从错误中看到的那样,问题在于Spring配置,而不是休眠。

答案 1 :(得分: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>