【发布时间】:2019-06-06 08:59:52
【问题描述】:
我需要检查我的实际实体是否与旧实体不同。
我使用反射是因为我的方法必须标准化。
对于每一列,当且仅当它不为空时,我才更新值(因为我从 CSV 读取它并且可能未指定列)。
for(Field column : fields){
column.setAccessible(true);
Object newValue = column.get(myObject);
if( newValue != null && !newValue.equals(column.get(oldObject))){
column.set(oldObject, newValue);
}
}
this.entitymanager.merge(oldObject)
如果我进行这样的更改,则不会完成任何 UPDATE 查询。
如果我以正常方式更改值oldobject.setValue(newValue),则查询完成并更新记录。
如果我通过反射更改值,为什么实体管理器不执行 UPDATE 查询?
【问题讨论】:
-
我认为这是因为托管实体是代理的,并且 setter 调用可以满足您的需求。我不确定这是否可能如您所愿。
标签: jpa eclipselink wildfly-15