这段代码能够有效更新吗?如果不能请说明原因并改正 HrWorkHandoverBasic oldEnt = hrWorkHandoverBasicMapperselectByIdpkId; fieldInfo = EntityUtilgetUpdInfooldEnt entity; LogContextput
这段代码可以有效更新。原因是它首先通过ID查询到数据库中的旧实体对象oldEnt,然后通过EntityUtil.getUpdInfo方法获取到更新的字段信息fieldInfo,并将相关日志信息放入LogContext中。接着通过hrWorkHandoverBasicMapper.updateById方法将实体对象entity更新到数据库中。
接下来,代码对比了传入的数据和数据库中的数据,并进行了相应的操作。首先,通过stream和filter方法将传入的数据进行筛选,得到一个Map对象collects,其中key为pkId,value为HrWorkHandoverRecord对象。然后通过queryList方法查询出数据库中的数据,并将其放入list中。接着通过stream遍历list中的每个元素rrWorkHandoverRecord,如果collects中包含该元素的pkId,则调用rrWorkHandoverRecordService.update方法进行更新操作;否则调用rrWorkHandoverRecordService.deleteHrWorkHandoverRecord方法进行删除操作,并在collects中移除该元素的pkId。最后,通过stream和filter方法将传入的数据中pkId为空的元素插入到数据库中。
代码逻辑基本正确,但有一个错误。在更新操作中,应该将新的实体对象entity作为参数传递给rrWorkHandoverRecordService.update方法,而不是旧的实体对象rrWorkHandoverRecord。修改后的代码如下:
list.stream().forEach(rrWorkHandoverRecord -> {
if (collects.containsKey(rrWorkHandoverRecord.getPkId())) {
rrWorkHandoverRecordService.update(collects.get(rrWorkHandoverRecord.getPkId()));
} else {
rrWorkHandoverRecordService.deleteHrWorkHandoverRecord(rrWorkHandoverRecord.getPkId());
}
collects.remove(rrWorkHandoverRecord.getPkId());
});
这样可以保证在更新操作中使用正确的实体对象
原文地址: http://www.cveoy.top/t/topic/iZEh 著作权归作者所有。请勿转载和采集!