2017-05-31 5 views
0

Hibernate-core 5.10.2 et Hibernate-envers-5.10.2 avec persistance.xml si j'ajouter hibernate.envers.autoRegisterListeners être true je suis arrivé:Hibernate-Enver écouteur d'événement en double trouvé

org.hibernate.event.service.spi.EventListenerRegistrationException: Duplicate event listener found 
    at org.hibernate.event.service.internal.EventListenerGroupImpl.listenerShouldGetAdded(EventListenerGroupImpl.java:126) 
    at org.hibernate.event.service.internal.EventListenerGroupImpl.appendListener(EventListenerGroupImpl.java:91) 
    at org.hibernate.event.service.internal.EventListenerGroupImpl.appendListeners(EventListenerGroupImpl.java:85) 
    at org.hibernate.event.service.internal.EventListenerRegistryImpl.appendListeners(EventListenerRegistryImpl.java:156) 
    at org.hibernate.envers.boot.internal.EnversIntegrator.integrate(EnversIntegrator.java:86) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889) 

Si je mets drapeau faux, exception ci-dessus n'apparaît mais pas de la requête d'insertion viré pour les tables _AUD. J'utilise Karaf 4.0.7 avec fonction installé:

<feature version="5.2.10.Final" >hibernate-orm</feature> 
<feature version="5.2.10.Final" >hibernate-envers</feature> 

Quelqu'un peut-il me aider ce que je suis absent ??

Répondre

0

Problème résolu. Les auditeurs doivent être enregistrés, SO j'ai ajouté:

EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);  
listenerRegistry.appendListeners(EventType.POST_UPDATE, new EnversPostUpdateEventListenerImpl(enversService)); 
    listenerRegistry.appendListeners(EventType.POST_INSERT, new EnversPostInsertEventListenerImpl(enversService)); 
    listenerRegistry.appendListeners(EventType.PRE_UPDATE, new EnversPreUpdateEventListenerImpl(enversService)); 
+0

Ceux-ci ne devraient pas vraiment être enregistrés manuellement. L'intégration d'Envers avec ORM devrait automatiquement le faire. En fait, nous avons plusieurs tests OSGi dans notre suite de tests et nous ne les enregistrons jamais manuellement, cela doit donc être quelque chose dans votre environnement qui vous oblige à le faire. – Naros

+0

Etes-vous sûr que votre instance de Karaf ne mélange pas plusieurs versions d'Envers? – Naros

+0

Oui, une seule version d'Hibernate est présente. – NSF