工單系列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!
雖然我的錯誤挺弱智的,但是學到了很多。