Ядро данных:Как мне автоматически выполнять действия при совершении транзакции?
-
11-09-2019 - |
Вопрос
Рассмотрите возможность создания приложения, использующего DataNucleus со следующей структурой сохранения:
У вас есть класс, который имеет два атрибута, таких как созданный (Дата) и Последняя дата (Дата):Как вы автоматически заполняете эти атрибуты соответствующими значениями, когда объект этого класса будет зафиксирован?Соответствующими значениями были бы установка обоих, созданный и Последняя дата к текущему времени, когда объект вставлен в базу данных и просто обновляется Последняя дата когда это изменится.
Решение
Теперь я сам это понял.
Вам нужно создать ИнстансеЛифециклеЛистенер...
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);
}
}
}
а затем зарегистрируйте его в вашем PersistenceManager...
PersistenceManager pm = pmf.getPersistenceManager();
pm.addInstanceLifecycleListener(new BasicEntityLifecycleListener(), null);
Я нашел решение в Руководство пользователя DataNucleus Access Plaftorm который я не осознавал до сих пор.Онлайн-руководство кажется мне немного сложным.