JPA PreUpdate implementado usando DescriptorEventAdapter chamado após find / seleccionar
-
19-09-2019 - |
Pergunta
Eu tenho implementado um DescriptorEventAdapter para JPA (EclipseLink). Ele executa operações timestamp simples. O método PreUpdate está sendo chamado, no entanto, ele está sendo chamado muitas vezes. Ele é chamado e atualiza o timestamp, mesmo em localizar / selecione operações.
O problema que eu estou correndo em parece ocorrer num quadro JPA diferente também, http://markmail.org/message/nank44rgp4xi2ita#query:JPA%20preupdate%20being%20called%20after%20find+page:1+ mid: xssqpg7hm4mesfl5 + estado: resultados .
Tentei:
- marque a ChangeSet na DescriptorEvent, este é sempre nulo
- verificar o código na DescriptorEvent, este é sempre 6
Eu não tenho sido capaz de encontrar qualquer outra bandeira ou atributo que diz "este objeto realmente foi atualizado".
Como faço para obter PreUpdate agir apenas quando um registro realmente foi atualizado e não apenas selecionada?
Solução
http://wiki.eclipse.org/Configuring_a_Descriptor_(ELUG)#Table_115 -27
O PreUpdate é chamado o tempo todo, aparentemente. aboutToUpdate é o melhor método para chamar para acionar quando um necessidades de atualização a ser feito.
Outras dicas
Aqui está a solução eu vim acima com depois de ler esta pergunta; Eu também achei que o conjunto de alterações no DescriptorEvent sempre parece ser nulo.
Eu fiz no entanto aviso de que o evento tem métodos para obter o antes e depois objetos:
Object oldObject = event.getOriginalObject();
Object newObject = event.getSource();
o que lhe permite fazer a comparação manual dos campos. Usando reflexão você pode escrever um pouco de código que poderia comparar todos os campos em qualquer classe.