有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

entityManagerFactory未命名为“entityManagerFactory”时的java

我的webapp包含许多EntityManagerFactory(DBs)。每个都有自己独特的名称,如entityManagerFactoryAppentityManagerFactoryBusinessentityManagerFactoryForum

在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>

运行Spring时会抛出以下错误:

NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined

但是我的EntityManager工厂没有一个被命名为EntityManager工厂

我查看了OpenEntityManagerInViewFilter的代码,找到了setEntityManagerFactoryBeanName()方法。如何在web中设置它的值。xml

此外,由于我有多个emf,我应该在web中定义多个OpenEntityManagerInViewFilter。xml

环境:Spring3.0.2,Hibernate3.5.1。最终,树脂4.0.7,JPA2(hibernate-jpa-2.0-api)


共 (1) 个答案

  1. # 1 楼答案

    OpenEntityManagerInViewFilterGenericFilterBean的一个子类,它自动将filter init参数转换为bean属性。因此,要在过滤器上设置entityManagerFactoryBeanName属性,只需使用init参数:

    <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>
    

    每个EntitymanagerFactory需要一个这样的函数,并相应地设置entityManagerFactoryBeanName