Как я могу настроить JPA EntityListener через конфигурационный файл Spring XML?
Вопрос
У меня есть два веб-приложения, которые собраны вместе и соответственно предоставляют клиенту и администратору доступ к базе данных.
Я хотел бы зарегистрировать два 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, так что, возможно, я что-то неправильно понял ... Спасибо за вашу помощь!
Решение
Я думаю, что вы ищете что-то вроде этого (не говоря уже о реальных слушателях в этом примере):
<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>