Ich habe einen Ereignis-Listener für Überwachungsvorgänge über meine Entitäten implementiert. Zum Beispiel habe ich einen für PreInsertEventListener namens HibernatePreInsert erstellt. Beim Lesen von Stackoverflow habe ich einen Integrator namens HibernateIntegrator konfiguriert. Da ich Hibernate 4 und Spring 4 verwende, habe ich eine Datei unter META-INF/services mit dem Namen com.dacasals.raspertwo.interceptors.HibernateInterceptor erstellt und dort die Integrator-Klasse hinzugefügt, wie im Web und auch hier empfohlen. Aber wenn ich meine Anwendung starte und ein neues Element einfüge, passiert nichts, nicht einmal die Nachrichten meines HibernatePrePersist werden angezeigt. Dies ist das erste Mal, dass ich Hibernate EventListeners ausprobiere, und ich weiß nicht, woran es liegen könnte.Ereignis-Listener funktioniert nicht bei Hibernate?
Hier und als Beispiel der in meinem Problem beteiligten Klassen, auch die Strukturdatei:
Der Zuhörer:
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;
}
}
Der Integrator:
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
}
}
Die Datei com.dacasals .raspertwo.interceptors.HibernateInterceptor:
com.dacasals.raspertwo.interceptors.HibernateInterceptor
Vielen Dank im Voraus.
BEARBEITET: Ich machte einen Fehler beim Schreiben. Ich benutze Hibernate 5, nicht 4.
Was ist das Ziel Ihres Zuhörers? Möchten Sie Werte für das Objekt selbst festlegen oder möchten Sie eine Zeile in eine andere Tabelle einfügen? – Naros
Ich möchte Informationen über das ausgeführte Ereignis in meiner Datenbank speichern. Wenn beispielsweise eine neue Person eingefügt wird, möchte ich den Zeitstempel der ausgeführten Operation speichern. Ich habe versucht, dieses einfache Beispiel mit der onPreInsert-Methode zu machen, aber es ist nichts passiert. Dann habe ich eine Nachricht angezeigt und festgestellt, dass nichts passiert ist. – Ethan
Ich gehe davon aus, dass Sie nur die Hibernate-Core-Abhängigkeit mit Hibernate 4 importieren und nicht die 'hibernate-entitymanager'-Abhängigkeit verwenden und mit einer' SessionFactory' arbeiten. Ist das eine korrekte Annahme? – Naros