1. 程式人生 > >數據庫異常整理:org.hibernate.QueryException: could not resolve property: “mStation”

數據庫異常整理:org.hibernate.QueryException: could not resolve property: “mStation”

blog use could not 小寫字母 www. 實例變量 特殊情況 lips 數據

最近用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”