我用spring 2.5+jpa+struts。我要用spring来管理jpa的entityManger便于管理延时加载。
在没加spring管理延时加载的过滤器一切都正常使用,但是加上就报错
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:387)
org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:971)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:246)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:884)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:151)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:134)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:93)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)我在web.xml这样配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>spring.xml是这样
<bean id="sessionFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
   <property name="dataSource" ref="dataSource"/>
   <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
   <property name="loadTimeWeaver">
   <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"></bean>
   </property>
   </bean>   <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
   <property name="entityManagerFactory" ref="sessionFactory"></property>
   </bean>
   <tx:annotation-driven transaction-manager="txManager"/>

解决方案 »

  1.   

    这不明摆着告诉你吗?你没有定义 entityManagerFactory。
      

  2.   

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property .... property自己设定        </property>
        </bean>
      

  3.   

    好了。是
    <bean id="sessionFactory“ class="org.springframework.orm.。。
    这的id名字要和下面的
    <property name="entityManagerFactory" ref="sessionFactory"></property>
    一致。都换成entityManagerFactory
    有一点我不明白。上面只是个初始化一个bean ,而下面是注入这个bean,名字可以不用一致啊。
      

  4.   

    不对,我的id即便是entityManagerFactory但还是报和你相同的错误,不知道什么原因,希望大家帮帮我啊