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