如何通过Spring XML配置文件配置JPA EntityListener?

时间:2009-10-30 10:35:29

标签: java spring jpa entity listener

我有两个webapps,它们一起构建,分别提供对数据库的客户端和管理员访问权。

我想将两个JPA EntityListeners注册到一个给定的类,每个应用程序一个。为此,我试图找到一种方法来通过配置每个应用程序的JPA上下文的Spring XML配置文件来注册侦听器......并且找不到任何方法。

有没有人做过类似的事情?

以下是XML配置文件的一部分:

<bean id="tempEntityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
  p:dataSource-ref="tempDataSource" p:persistenceUnitName="tempJpa" >

  <property name="jpaVendorAdapter">
    <bean
      class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
      p:database="ORACLE" 
      p:databasePlatform="org.hibernate.dialect.Oracle9iDialect"
      p:showSql="false"   />
  </property>

  <property name="jpaProperties">
    <props>
      <prop key="hibernate.hbm2ddl.auto">validate</prop>
    </props>
  </property>

</bean>

我认为有一种方法可以在这些元素周围注册一个监听器,尤其是JPAProperties,因为它似乎是设置JPA配置元素的地方......

JPA规范谈到实体监听器XML元素,但我找不到将它们注入可用Spring元素的方法......

我对Spring很新,所以我可能误解了一些事情......感谢您的帮助!

1 个答案:

答案 0 :(得分:10)

我猜你正在寻找的是这样的事情(更不用说这个例子中的实际听众了):

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

    <!-- other configuration cut out -->

    <property name="jpaProperties">
        <props> 

            <!-- for hibernate envers -->
            <prop key="hibernate.ejb.event.post-insert">
                org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener
            </prop>
            <prop key="hibernate.ejb.event.post-update">
                org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener
            </prop>
            <prop key="hibernate.ejb.event.post-delete">
                org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener
            </prop>
            <prop key="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener
            </prop>
            <prop key="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener
            </prop>
            <prop key="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListener
            </prop>
        </props>
    </property>
</bean>