JPA PreUpdate реализовано с использованием DescriptorEventAdapter, вызываемого после поиска / выбора - PullRequest
0 голосов
/ 09 февраля 2010

Я реализовал DescriptorEventAdapter для JPA (eclipselink). Он выполняет простые операции с метками времени. Вызывается метод preUpdate, однако он вызывается слишком часто. Он вызывается и обновляет временную метку даже при операциях поиска / выбора.

Проблема, с которой я сталкиваюсь, возникает и в другой среде JPA, http://markmail.org/message/nank44rgp4xi2ita#query:JPA%20preupdate%20being%20called%20after%20find+page:1+mid:xssqpg7hm4mesfl5+state:results.

Я попытался:

  • проверьте набор изменений на DescriptorEvent, это всегда null
  • проверьте код на DescriptorEvent, это всегда 6

Мне не удалось найти какой-либо другой флаг или атрибут, который говорит, что «этот объект действительно был обновлен».

Как заставить preUpdate действовать только тогда, когда запись действительно обновлена, а не просто выбрана?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

http://wiki.eclipse.org/Configuring_a_Descriptor_(ELUG)#Table_115-27

PreUpdate вызывается все время, по-видимому. aboutToUpdate - лучший метод для вызова, когда необходимо выполнить обновление.

0 голосов
/ 31 мая 2012

Вот решение, которое я нашел после прочтения этого вопроса; Я также обнаружил, что набор изменений в DescriptorEvent всегда кажется нулевым.

Однако я заметил, что у события есть методы для получения объектов до и после:

 Object oldObject = event.getOriginalObject();
 Object newObject = event.getSource();

, что позволит вам сделать ручное сравнение полей. Используя отражение, вы можете написать немного кода, который мог бы сравнить все поля в любом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...