2013-05-15 53 views
0

我正面临一个问题,即将实体管理器与应用程序上下文中存在的bean联系起来。每当我做一些操作时,它会给出NullPointerException。无法连接entityManager和applicationContext bean

这是我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; 
} 

所以每当我用这个实体管理它给空指针异常 请帮忙!

回答

0

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

0

您的实体管理器bean被称为enetityManagerOne,但该变量被称为entityManager。在XML文件中也许renamme你的bean:

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

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

对于交易性支持:

<tx:annotation-driven/> 

解析JPA注解支持:

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

我改变了,但仍然给它同样的问题。 :( –

+0

你能否确定你的文件包'AbstractRepository'?你只是在扫描包'com.ajit.retail'。 – Kartoch

+0

我已经更新了我的答案,请检查... – Kartoch

0

使用此代码在您的调度员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" /> 

它解决我的问题,希望这将有助于。