EclipseLink / JPA EntityListener: проверить, изменен ли объект - PullRequest
1 голос
/ 20 декабря 2010

Я использую стандартные EntityListeners (preUpdate и prePersist), чтобы записать метки создания и обновления для моих сущностей. Когда новый дочерний элемент добавляется в коллекцию (OneToMany) и вызывается persist, родительская запись отправляется в EntityListener, а отметки времени обновляются. Моя проблема в том, что я не хочу обновлять родительский элемент, если в коллекцию была добавлена ​​только новая дочерняя запись. Есть ли способ проверить, была ли изменена сущность (внутри EntityListerner)? Спасибо Andreas

1 Ответ

0 голосов
/ 03 февраля 2011

Это может помочь вам (не проверено, но я думаю, что это будет работать).событие DescriptorEvent, которое вы получили, object - сущность, которую вы хотите проверить на изменения.

   UnitOfWorkImpl uow = (UnitOfWorkImpl) event.getSession();
   ClassDescriptor descriptor = uow.getDescriptor(object);

   boolean isNew = uow.isObjectNew(object);
        if (isNew || descriptor.getObjectChangePolicy().shouldCompareExistingObjectForChange(object, uow, descriptor)) {
            ObjectChangeSet changes = null;
            if (isNew) {
                changes = descriptor.getObjectChangePolicy().calculateChangesForNewObject(object, changeSet, uow, descriptor, true);
            } else {
                changes = descriptor.getObjectChangePolicy().calculateChangesForExistingObject(object, changeSet, uow, descriptor, true);
            }
   boolean hasChanges = changes.hasChanges();
...