当entityManagerFactory未命名为"entityManagerFactory"时

sma*_*ufo 1 java spring servlets jpa servlet-filters

我的webapp包含许多entityManagerFactories(DB),每个都有其唯一的名称,例如entityManagerFactoryApp,entityManagerFactoryBusiness,entityManagerFactoryForum ...等.

在webapp中,我必须添加OpenEntityManagerInViewFilter来实现"在视图中打开会话"模式.

<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>
Run Code Online (Sandbox Code Playgroud)

但是当跑步时,Spring抱怨道 NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined

但是我的EMF没有命名为"entityManagerFactory",我查找了OpenEntityManagerInViewFilter的代码和find setEntityManagerFactoryBeanName()方法,但是我应该如何在web.xml中设置它的值呢?而且,我有多个EMF,我OpenEntityManagerInViewFilter在web.xml中定义了多个?

提前致谢.

环境:Spring 3.0.2,Hibernate 3.5.1.Final,Resin 4.0.7,JPA2(hibernate-jpa-2.0-api)

ska*_*man 5

OpenEntityManagerInViewFilter是它的子类GenericFilterBean,它自动将过滤器init参数转换为bean属性.因此,要entityManagerFactoryBeanName在过滤器上设置属性,只需使用init-param:

<filter>
   <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
   <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
   <init-param>
      <param-name>entityManagerFactoryBeanName</param-name>      
      <param-value>entityManagerFactoryApp</param-value>       
   </init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)

你需要其中一个EntitymanagerFactory,相应的entityManagerFactoryBeanName设置.