Новый подход заключается в использовании интегратора для регистрации прослушивателей событий.Hibernate теперь будет использовать обнаружение служб для регистрации прослушивателей событий, и вот как я заставил его работать с помощью maven archetype-webapp
создайте файл в META-INF / services (который должен находиться в каталоге ваших ресурсов) с именемorg.hibernate.integrator.spi.Integrator со всеми классами, которые реализуют интерфейс spi hibernate, по одной строке каждый.Краткий пример ниже:
...
META-INF / services / org.hibernate.integrator.spi.Integrator
com.example.CustomIntegrator
com.example.CustomIntegrator
package com.example;
import ...;
public void CustomIntegrator implements Integrator {
static final Logger logger = LoggerFactory.getLogger(CustomIntegrator.class);
@Override
public void integrate(Configuration configuration, SessionFactoryImplementor implementor, SessionFactoryServiceRegistry registry) {
final EventListenerRegistry eventRegistry = registry.getService(EventListenerRegistry.class);
logger.info("Registering event listeners");
// you can add duplication strategory for duplicate registrations
...
// prepend to register before or append to register after
// this example will register a persist event listener
eventRegistry.prependListeners(EventType.PERSIST, myListener);
...
}
...
}
com.example.MyListener
package com.example;
import ...
public class MyListener implements PersistEventListener {
static final Logger logger = LoggerFactory.getLogger(MyListener.class);
public void onPersist(PersistEvent event) throws HibernateException {
logger.debug("Entering MyListener");
if(event.getObject() instanceof MyPersistableEntity) {
MyPersistableEntity entity = (MyPersistableEntity) event.getObject();
// do something with entity
...
}
}
...
}
Любой объект, которому необходимо зарегистрировать это событие, должен реализовать MyPersistableEntity (здесь не показано)