1. 程式人生 > >工單系列2 ---- MyBatis 報錯 there is no getter for property named “xxx” in "class xxx"

工單系列2 ---- MyBatis 報錯 there is no getter for property named “xxx” in "class xxx"

系統中資料由移植而來,所以某一張表,稱為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.csdn.net/qing_gee/article/details/47122227

5.  還有些是使用foreach,但是沒有用對遍歷的方式,那就看這篇寫得詳細  http://www.cnblogs.com/azhqiang/p/5604113.html

以上大概就是別人常見的錯誤。但是我怎麼對都不是我的情況。

然後看到一篇帖子,樓主也是和我一樣,怎麼都找不到問題,下面有個回覆,實體類是否有重新生成,比如修改了DB後,實體類是不是還是舊的。

我一想,也許只有這個能說通了。

重新編譯一次,重啟服務。重新測試,nice!

雖然我的錯誤挺弱智的,但是學到了很多。