Datanucleus: Wie kann ich Aktionen automatisch ausführen, wenn eine Transaktion zu begehen?
-
11-09-2019 - |
Frage
Betrachten Sie eine Anwendung, die unter Verwendung von Datanucleus mit folgenden Persistenz Struktur:
Sie haben eine Klasse, die zwei Attribute wie hat erstellt (Datum) und lastupdate (Datum): Wie füllen Sie automatisch diese Attribute mit den entsprechenden Werten, wenn ein Objekt dieser Klasse werden begangen wird? Geeignete Werte beide werden Einstellung würde, erstellt und lastupdate auf die aktuelle Zeit, wenn ein Objekt in die Datenbank eingefügt wird und nur die Aktualisierung lastupdate , wenn es hat geändert.
Lösung
ich es selbst jetzt herausgefunden.
Sie benötigen ein InstanceLifecycleListener ...
public class BasicEntityLifecycleListener implements StoreLifecycleListener {
public void postStore(InstanceLifecycleEvent evt) {
}
public void preStore(InstanceLifecycleEvent evt) {
if((PersistenceCapable)evt.getSource() instanceof BasicEntity) {
BasicEntity obj = (BasicEntity)evt.getSource();
Date now = new Date();
if(JDOHelper.isNew(obj))
obj.setCreated(now);
obj.setLastUpdate(now);
}
}
}
und dann registrieren Sie es in dir PersistenceManager ...
PersistenceManager pm = pmf.getPersistenceManager();
pm.addInstanceLifecycleListener(new BasicEntityLifecycleListener(), null);
Ich fand die Lösung in der Datanucleus Access-plaftorm Handbuch die ich habe erst jetzt erkannt. Das Online-Handbuch scheint ein wenig komplex zu mir.