Как я могу настроить JPA EntityListener через конфигурационный файл Spring XML? - PullRequest
7 голосов
/ 30 октября 2009

У меня есть два веб-приложения, которые собраны вместе и соответственно предоставляют клиенту и администратору доступ к базе данных.

Я бы хотел зарегистрировать два JPA EntityListeners для данного класса, по одному в каждом приложении. Для этого я пытаюсь найти способ зарегистрировать слушателей через конфигурационный файл Spring XML, который настраивает контекст JPA каждого приложения ... и просто не может найти какой-либо способ.

Кто-нибудь уже делал что-то подобное?

Вот часть файла конфигурации 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 Ответ

10 голосов
/ 02 ноября 2009

Я думаю, что вы ищете что-то вроде этого (не говоря уже о реальных слушателях в этом примере):

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