EclipseLink / JPA EntityListener:检查实体是否被修改

时间:2010-12-20 15:37:06

标签: eclipselink entitylisteners

我正在使用默认的EntityListeners(preUpdate和prePersist)来为我的实体编写创建和更新时间戳。将新子项添加到集合(OneToMany)并调用persist时,父记录将发送到EntityListener,并更新时间戳。我的问题是,如果只将新的子记录添加到集合中,我不想更新父级。有没有办法检查实体是否被修改(在EntityListerner中)? 谢谢 安德烈亚斯

1 个答案:

答案 0 :(得分:0)

这可能会对你有帮助(没有经过测试,但我认为它会起作用)。 事件是您获得的DescriptorEventobject是您要检查更改的实体。

   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();