最近在开发中遇到这样的问题,百度了一顿看到了这样的回答:
然后就看我相关的代码,我在业务处理的逻辑确实是先查询然后进行update,在执行我更新语句的时候就报了这个错误。
这里说一下:
由于我的代码逻辑是先从库里查询这个对象,如果没有就先创建对象设置默认值,然后去更新该对象的某个属性。
一开始是以为更新的方法有问题,不执行,然后换了个更新方法,再去执行发现,还是会报这个错误。
然后排查到,发现是先获取这个对象有问题(也就是先查询出来的对象),我在debug发现,对象里所有属性的值都是null,包括主键id。
经过一系列的debug发现,如果是第一次没有对象创建对象设置默认值的时候,这个时候去调用该对象去更新某个属性就会报该错误。第二次及后续就能正常更新了。
最后解决方案是:
第一次没有对象创建对象设置默认值。然后再从库里查询出来该对象,再用查询的对象去更新属性。
同时再说明一个问题:
再设置默认值的时候,确保所有的字段都有值,否则在查询的时候,可能会报类型转换异常,这是因为该字段没有设置默认值,查询的时候因为数据库里是null,所以在通过代码转换封装的时候需要转换成你需要的类型,比如String,int···,那么这个时候就会报异常。