代码之家  ›  专栏  ›  技术社区  ›  Sébastien

如何通过Spring XML配置文件配置JPA实体侦听器?

  •  7
  • Sébastien  · 技术社区  · 15 年前

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

    我想为一个给定的类注册两个jpa entitylistener,每个应用程序一个。为此,我试图通过配置每个应用的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>
    

    我认为有一种方法可以在这些元素周围注册侦听器,尤其是可引用的,因为它似乎是设置多个配置元素的地方…

    JPA规范讲述实体侦听器XML元素,但我找不到在可用的Spring元素中注入它们的方法…

    我对春天还不太熟悉,所以我可能误解了…谢谢你的帮助!

    1 回复  |  直到 15 年前
        1
  •  10
  •   Bart    15 年前

    我猜你要找的是这样的东西(不要介意这个例子中的实际听众):

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