Domanda

Ho due webapp, che sono costruite insieme e forniscono rispettivamente un accesso client e admin a un database.

Vorrei registrare due EntityListener JPA in una determinata classe, uno in ciascuna app. Per farlo, sto cercando di trovare un modo per registrare i listener tramite il file di configurazione XML Spring che configura il contesto JPA di ogni app ... e non riesco proprio a trovare alcun modo.

Qualcuno ha già fatto qualcosa di simile?

Ecco una parte del file di configurazione 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>

Ho pensato che ci fosse un modo per registrare un ascoltatore attorno a questi elementi, in particolare JPAProperties, dal momento che sembra essere il posto giusto per impostare gli elementi di configurazione JPA ...

La specifica JPA parla di elementi XML di listener di entità, ma non riesco a trovare un modo per iniettarli negli elementi Spring disponibili ...

Sono abbastanza nuovo in Spring, quindi potrei aver frainteso qualcosa ... Grazie per il tuo aiuto!

È stato utile?

Soluzione

Suppongo che quello che stai cercando sia qualcosa del genere (non importa gli ascoltatori reali in questo esempio):

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top