0

我在将实体管理器与应用程序上下文中存在的 bean 连接时遇到了问题。每当我做一些操作时,它都会给出 NullPointerException。

这是我的 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"
       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">

    <context:component-scan base-package="com.ajit.retail"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver"/>
        <property name="url" value="jdbc:postgresql://localhost/retail"/>
        <property name="username" value="retail_user"/>
        <property name="password" value="password"/>
    </bean>

    <bean id="entityManagerOne" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true"/>
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQL82Dialect"/>
            </bean>
        </property>
    </bean>

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

    <tx:annotation-driven transaction-manager="transactionManager"/>

    </beans>

这是我在其中创建实体管理器的 java 文件

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class AbstractRepository {

    @PersistenceContext
    EntityManager entityManager;
}

所以每当我使用这个实体管理器时,它都会给出空指针异常,请帮忙!

4

3 回答 3

0

我的应用程序上下文不在正确的位置(src/main/resources)。现在我把它放在那里并且它的工作。

于 2013-05-18T07:06:45.673 回答
0

在您的 dispatcher-servlet.xml 中使用此代码

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
        <property name="persistenceXmlLocations">
            <list>
                <value>classpath*:META-INF/persistence.xml</value>
            </list>
        </property>
        <property name="defaultDataSource" ref="dataSource"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitManager" ref="persistenceUnitManager"/>
        <property name="persistenceUnitName" value="etray"/>
    </bean>
    <jee:jndi-lookup id="dataSource" jndi-name="java:/prateek" />


<!-- we plan to use JTA transactions and declare them using annotations -->
    <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager" />
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- to inject instances of EntityManager using @PersistenceContext annotation -->
    <bean
        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

它解决了我的问题,希望它会有所帮助。

于 2014-09-04T14:24:41.807 回答
0

您的实体管理器 bean 称为 enetityManagerOne,但变量称为 entityManager。也许在您的 XML 文件中重命名您的 bean:

<bean id="entityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

另一种解决方案可能是您忘记了以下 bean 声明:

对于事务的支持:

<tx:annotation-driven/>

解析 JPA 注解的支持:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
于 2013-05-15T10:40:09.620 回答