2013-05-15 56 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" /> 

它解決我的問題,希望這將有助於。