Я внедрил прослушиватель событий для операций аудита над моими объектами. Например, я сделал один для PreInsertEventListener под названием HibernatePreInsert. Кроме того, прочитав здесь, в stackoverflow, я сконфигурировал Integrator под названием HibernateIntegrator. Поскольку я использую Hibernate 4 и весну 4, я создал файл в META-INF/services с именем com.dacasals.raspertwo.interceptors.HibernateInterceptor, и там я добавил класс интегратора, как это рекомендовано в Интернете, а также здесь. Но когда я запускаю свое приложение и вставляю новый элемент, ничего не происходит, даже сообщения моего HibernatePrePersist не отображаются. Это первый случай, когда я пытаюсь использовать Hibernate EventListeners, и я не знаю, что может быть неправильным.Слушатель событий не работает в спящем режиме?
Вот и пример из классов, участвующих в моей проблеме, а также файловой структуры:
Слушатель:
public class HibernatePreInsert implements PreInsertEventListener{
private static final long serialVersionUID = 1L;
static final Logger logger = LoggerFactory.getLogger(HibernatePreInsert.class);
@Override
public boolean onPreInsert(PreInsertEvent event) {
if(event.getEntity() instanceof Person){
//display a message to know if this works or not
logger.info("It works");
}
return false;
}
}
Интегратор:
public class HibernateIntegrator implements Integrator{
public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry){
final EventListenerRegistry registry = serviceRegistry.getService(EventListenerRegistry.class);
HibernatePreInsert listener = new HibernatePreInsert();
registry.prependListeners(EventType.PRE_INSERT, listener);
}
@Override
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
@Override
public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
}
The файла com.dacasals .raspertwo.interceptors.HibernateInterceptor:
com.dacasals.raspertwo.interceptors.HibernateInterceptor
Заранее спасибо.
EDITED: Я сделал ошибку во время записи. Я использую Hibernate 5, а не 4.
Какова цель вашего слушателя? Вы хотите установить значения для самой сущности или хотите вставить строку в другую таблицу? – Naros
Я хочу сохранить в моей базе данных о произошедшем событии. Например, если новый человек вставлен, я хочу сохранить временную метку выполняемой операции. Я пытался сделать этот простой пример по методу onPreInsert, но ничего не произошло, тогда я отобразил сообщение и понял, что ничего не происходит. – Ethan
Я предполагаю, что вы просто импортируете зависимость «hibernate-core» с Hibernate 4 и не используете зависимость «hibernate-entitymanager» и работаете с «SessionFactory». Это правильное предположение? – Naros