數據庫異常整理:org.hibernate.QueryException: could not resolve property: “mStation”
最近用hibernate作數據庫查詢,結果遇到問題:
org.hibernate.QueryException: could not resolve property: ‘mStation’of 經過各個步驟檢查,還是沒找到方法。
在此,整理一下這個問題的導致可能原因:
一、排查HQL語句中的類字段,看是否是java類中的字段,不要是數據庫中的字段;
二、排查各個字段是否與類中字段一致,絕大多數可能是由於字段不匹配導致的問題;
三、如果以上兩部都檢查沒有問題,那麽很可能就是JavaBean命名規範不嚴格符合所導致的hibernate不能夠匹配字段的問題。(附:命名規範)
JavaBean類命名規範:(註意:要實現可序列化接口(java.io.Serializable接口))
規範參考:http://www.cnblogs.com/Ghost-Draw-Sign/articles/1801476.html
(1)JavaBean 類必須是一個公共類,並將其訪問屬性設置為 public ,如: public class user{......}
(2)JavaBean 類必須有一個空的構造函數:類中必須有一個不帶參數的公用構造器
(3)一個javaBean類不應有公共實例變量,類變量都為private ,如: private int id;
(4)屬性應該通過一組存取方法(getXxx 和 setXxx)來訪問,一般是IDE(Eclipse、JBuilder) 為屬性生成getter/setter 方法
一般JavaBean屬性以小寫字母開頭,駝峰命名格式,相應的 getter/setter 方法是 get/set 接上首字母大寫的屬性名。例如:屬性名為userName,其對應的getter/setter 方法是 getUserName/setUserName。
但是,還有一些特殊情況:
1、如果屬性名的第二個字母大寫,那麽該屬性名直接用作 getter/setter 方法中 get/set 的後部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。
2、如果前兩個字母是大寫(一般的專有名詞和縮略詞都會大寫),也是屬性名直接用作 getter/setter 方法中 get/set 的後部分。例如屬性名為URL,方法是getURL/setURL。
3、如果首字母大寫,也是屬性名直接用作 getter/setter 方法中 get/set 的後部分。例如屬性名為Name,方法是getName/setName,這種是最糟糕的情況,會找不到屬性出錯,因為默認的屬性名是name。
所以在JavaBean命名時應該註意符合以上命名規範。
數據庫異常整理:org.hibernate.QueryException: could not resolve property: “mStation”