DataNucleus: как автоматически выполнять действия при совершении транзакции?


Рассмотрим приложение, использующее DataNucleus со следующей структурой персистенции:

У вас есть класс, который имеет два атрибута, таких как created (Date) и lastUpdate (Date): как вы автоматически заполняете эти атрибуты соответствующими значениями, когда объект этого класса собирается быть зафиксирован? Соответствующие значения будут устанавливать как created, так и lastUpdate на текущее время, когда объект вставляется в базу данных и просто обновление lastUpdate , когда он изменился.

1 2

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 , которое я до сих пор не распознал. Онлайновое руководство кажется мне немного сложным.