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

Java 代码更新逻辑分析及优化:HrWorkHandoverBasic 更新方法详解

原文地址: https://www.cveoy.top/t/topic/qFDK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录