工单系列2 ---- MyBatis 报错 there is no getter for property named “xxx” in "class xxx"

本文记录了一次因实体类与数据库字段映射不一致导致的问题排查过程,作者通过更改数据库字段名并重新编译项目解决了错误提示,并总结了常见的映射问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统中数据由移植而来,所以某一张表,称为A表吧,字段好几十个,都是按移出方提供的文件来设定的,后来开发开发着,需求就多了起来,也需要在A表上添加几个栏位。

但是我们开发也比较懒,做移植的脚本写的全部import到表里,比如

import from [filename] of del modified by codepage=1028 message xxx.log replace into table_a;

而没有分字段load,比如

load from [filename] of del modified by codepage=1028 method(1,2,3,4,5,……)  into table_a(d1,d2,d3,d4,d5,……) nonrecoverable;

那么后来新加的字段呢,就在导入数据完成后,alter table 加上去,那比如加上去的字段叫D_ADDED吧。

应该是这样的 alter table a add D_ADDED char(1);

但是呢,手残的我,看走眼了写成了


 alter table a add D_ADDEO char(1);


本来也没什么,但是说说我们的架构吧,那就有什么的了。因为使用了Spring的架构,所有SQL都是在XML 的map里面了,然后也需要对库表也要有一个实体类。

那我们代码里面都是按照D_ADDED 来写的。终于有一天,发现代码和数据库的字段名对不上。好吧好吧,我的锅我来背,好在数据库这个字段没有内容,把DB中字段名改了。

想着代码都一样,改不改没得所谓。


一下子,boom~

果然执行到涉及表A的时候,就报错了there is no getter for property named D_ADDED in xxx.xxx.xxx.a


这一下人就蒙圈了呗。在XML中对半天,在实体类中对半天。大小写完全正确,开发兄弟些的代码简洁优美。到底是哪里出错呢。

那就求助度年吧。

找到了这个报错原因的几种类型:

1.  是真没在实体类里写getter的 ,这个比较少

2.  XML里面的SQL语句里面把 property 写到了 column的 ,这个也不多

3. XML里面property 和实体类中定义的成员名字不一样的,特别是大小写,这个多一点

4.   报错是:  there is no getter for property named D_ADDED in class java.lang.String  或者是 java.lang.Integer

      这种错误也很常见,我找到一篇博文写的很好,可以在里面了解了解

http://blog.youkuaiyun.com/qing_gee/article/details/47122227


5.  还有些是使用foreach,但是没有用对遍历的方式,那就看这篇写得详细  http://www.cnblogs.com/azhqiang/p/5604113.html


以上大概就是别人常见的错误。但是我怎么对都不是我的情况。

然后看到一篇帖子,楼主也是和我一样,怎么都找不到问题,下面有个回复,实体类是否有重新生成,比如修改了DB后,实体类是不是还是旧的。

我一想,也许只有这个能说通了。

重新编译一次,重启服务。重新测试,nice!


虽然我的错误挺弱智的,但是学到了很多。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值