DataNucleus: Como faço para executar ações automaticamente quando cometer uma transação?
-
11-09-2019 - |
Pergunta
Considere ter uma aplicação utilizando DataNucleus com a seguinte estrutura persistência:
Você tem uma classe que tem dois atributos, como criado (Data) e lastUpdate (Data): Como você preencher automaticamente esses atributos com os valores apropriados quando um objeto desta classe vai ser cometido? valores apropriados seriam definição de ambos, criado e lastUpdate para a hora atual quando um objeto é inserido no banco de dados e apenas atualizar lastUpdate quando tem alterado.
Solução
Eu percebi isso me agora.
Você precisa criar uma 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);
}
}
}
e, em seguida, registrá-lo dentro de você PersistenceManager ...
PersistenceManager pm = pmf.getPersistenceManager();
pm.addInstanceLifecycleListener(new BasicEntityLifecycleListener(), null);
Eu encontrei a solução no DataNucleus Acesso Plaftorm manual que Eu não reconheceram até agora. O manual online parece um pouco complexo para mim.