2017-05-31 66 views
0

Hibernate-core 5.10.2Hibernate-envers-5.10.2用,如果我加入hibernate.envers.autoRegisterListenerspersistance.xmltrue我:的Hibernate恩维尔重复事件侦听器发现

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) 

如果我设置标志是假的,上面的异常不出现,但没有插入查询为_AUD表格解雇。 我使用Karaf 4.0.7与功能的安装:

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

谁能帮我出了什么我失踪?

回答

0

问题已解决。听众需要注册,所以我补充说:

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

这些确实不应该要求手动注册。 Envers自动与ORM集成应该这样做。实际上,我们在测试套件中有几个OSGi测试,我们从来没有手动注册它们,所以这一定是你的环境中的东西,迫使你这样做。 – Naros

+0

你确定你的Karaf实例没有混合Envers的多个版本吗? – Naros

+0

是的,只有一个版本的hibernate存在。 – NSF