我正在使用默认的EntityListeners(preUpdate和prePersist)来为我的实体编写创建和更新时间戳。将新子项添加到集合(OneToMany)并调用persist时,父记录将发送到EntityListener,并更新时间戳。我的问题是,如果只将新的子记录添加到集合中,我不想更新父级。有没有办法检查实体是否被修改(在EntityListerner中)? 谢谢 安德烈亚斯
答案 0 :(得分:0)
这可能会对你有帮助(没有经过测试,但我认为它会起作用)。
事件是您获得的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();