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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top