As per https://vladmihalcea.com/hibernate-event-listeners/, I would like to configure entity listeners for post insert/update/delete events for my group of entities. I do not want these listeners for all entities in my application. So I created an abstract class for group of entities and implemented onPostUpdate/onPostInsert methods. But I wont be able to configure this abstract listener class for the integrator part as it would require only concrete listener. Any recommendation of the solution ?
ConfigHibernateEntity
import org.hibernate.event.spi.PostDeleteEvent;
import org.hibernate.event.spi.PostDeleteEventListener;
import org.hibernate.event.spi.PostInsertEvent;
import org.hibernate.event.spi.PostInsertEventListener;
import org.hibernate.event.spi.PostUpdateEvent;
import org.hibernate.event.spi.PostUpdateEventListener;
import org.hibernate.persister.entity.EntityPersister;
public abstract class ConfigHibernateEntity extends HibernateEntity implements PostUpdateEventListener, PostInsertEventListener, PostDeleteEventListener{
// public static final ConfigHibernateEntity INSTANCE = new ConfigHibernateEntity();
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void onPostUpdate(PostUpdateEvent event) {
final Object entity = event.getEntity();
System.out.println("On post update method");
}
@Override
public void onPostInsert(PostInsertEvent event) {
final Object entity = event.getEntity();
System.out.println("On post insert method");
}
@Override
public boolean requiresPostCommitHanding(EntityPersister persister) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onPostDelete(PostDeleteEvent event) {
final Object entity = event.getEntity();
System.out.println("On post delete method");
}
}
EventListenerIntegrator :
import org.hibernate.boot.Metadata;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.event.service.spi.EventListenerRegistry;
import org.hibernate.event.spi.EventType;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
public class EventListenerIntegrator implements Integrator {
@Override
public void integrate(Metadata metadata, SessionFactoryImplementor
sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
EventListenerRegistry eventListenerRegistry =
serviceRegistry.getService(EventListenerRegistry.class);
eventListenerRegistry.getEventListenerGroup(EventType.POST_INSERT)
.appendListener(new ConfigHibernateEntity());
eventListenerRegistry.getEventListenerGroup(EventType.POST_UPDATE)
.appendListener(new ConfigHibernateEntity());
eventListenerRegistry.getEventListenerGroup(EventType.POST_DELETE)
.appendListener(new ConfigHibernateEntity());
}
@Override
public void disintegrate(SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
}
}
CustomEntity1 Class:
public class CustomEntity1 extends ConfigHibernateEntity {
//
}
CustomEntity2 Class :
public class CustomEntity2 extends HibernateEntity {
//
}