情况一:
报错如下:
可以看出时standardValue字段出现了问题。
错误代码:
@Override public Result edit(ProductCheckItem productCheckItem) { UserDTO user = SessionCache.get(); productCheckItem.setUpdateTime(new Date()); productCheckItem.setUpdateUser(user.getUsername()); int i = productCheckItemDao.updateByPrimaryKey(productCheckItem); if (i > 0) { return Result.operating("修改成功", true, ResultCode.SUCCESS); } else { return Result.operating("修改失败", false, ResultCode.SUCCESS); } }
前端传递过来的参数:
难道是当standardValue为null时无法修改?
解决办法:将updateByPrimaryKey改为updateByPrimaryKeySelective,问题解决。
当用insert()插入时也会报这个错误,此时应该改为insertSelective().
情况二:
报错:无效的列类型
错误代码:
service
growMain.getSeedingRelList().forEach(rel -> { Map relMap = new HashMap(); relMap.put("seedingId", rel.get("id")); relMap.put("plantId", growMain.getId()); relMap.put("transplantingNum", rel.get("transplantingNum")); relMap.put("transplantingType", rel.get("transplantingType")); growMainMapper.insertSeedingRel(relMap); });
dao
int insertSeedingRel(Map map);
mapper.xml
<insert id="insertSeedingRel" parameterType="java.util.Map"> INSERT INTO b_plant_seeding_rela(plant_id, seeding_id, transplanting_num, transplanting_type) VALUES (#{plantId}, #{seedingId}, #{transplantingNum}, #{transplantingType}) </insert>
错误原因:如果前端没有传递transplantingNum和transplantingType,那么这两个值都为null,插入的时候就会报无效的列类型
解决办法:如果为null,则转为空字符串。用insertSelective可以避免将属性值为null的字段插入数据库,但是如果是用sql插入,那么就需要将null转为空字符串。
代码如下:
growMain.getSeedingRelList().forEach(rel -> { Map relMap = new HashMap(); relMap.put("seedingId", rel.get("id")); relMap.put("plantId", growMain.getId()); relMap.put("transplantingNum", rel.get("transplantingNum") == null ? "" : rel.get("transplantingNum")); relMap.put("transplantingType", rel.get("transplantingType") == null ? "" : rel.get("transplantingType")); growMainMapper.insertSeedingRel(relMap); });