【问题标题】:EclipseLink/JPA EntityListener: Check if entity is modifiedEclipseLink/JPA EntityListener:检查实体是否被修改
【发布时间】:2026-02-05 08:25:01
【问题描述】:
我正在使用默认的 EntityListeners(preUpdate 和 prePersist)向我的实体写入创建和更新时间戳。当一个新的子元素被添加到一个集合(OneToMany)并且持久化被调用时,父记录被发送到 EntityListener 并且时间戳被更新。我的问题是,如果只将新的子记录添加到集合中,我不想更新父项。有没有办法检查实体是否被修改(在 EntityListerner 内)?
谢谢
安德烈亚斯
【问题讨论】:
标签:
eclipselink
entitylisteners
【解决方案1】:
这可能会对您有所帮助(未经测试,但我认为它会起作用)。
event 是您得到的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();