1. 程式人生 > >hibernate 特殊情況下 屬性找不到get方法的解決方案

hibernate 特殊情況下 屬性找不到get方法的解決方案

Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for pOrgID in class com.oarage.basedata.commons.entity.UnloadOil

我說的情況是屬性名稱第一個字母小寫,第二個字母大寫,例如:eTypeName,則按照javabean specification規定的getter方法為getETypeName,則會出現找不到getter方法的錯誤。
今天看了一下javabean specification,規定了一般的屬性名稱首字母小寫,如果遇到前兩個字母大寫的屬性,則getter方法保持屬性名稱不變,例如URL屬性的getter方法為getterURL,但是並沒有規定類似eTypeName這樣的屬性的getter方法寫成geteTypeName的形式。

如果Hibernate實體屬性名稱 第2個字母是大寫 或者 出現兩個字母大寫:

hibernate 3.2.5.ga中會出現錯誤:Could not find a getter for “fieldName

hibernate3.2.7中會出現錯誤: Unable to instantiate default tuplizer


Hibernate用的方法是 :BasicPropertyAccessor.java

String methodName = methods[i].getName();
if( methodName.startsWith("get") ) {
        String testStdMethod = Introspector.decapitalize(methodName.substring(3) );
        String testOldMethod = methodName.substring(3);
        if( testStdMethod.equals(propertyName) || testOldMethod.equals(propertyName) ) return methods[i];       
}

呼叫的是 :Introspector.decapitalize(String name);
Sun的註釋說明
but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone.
他得到getXSize這個方法名,substring[3]為XSize然後decapitalize之後不修改首位字元,就Could not find a getter for xSize了
這個是Java Bean的Spec裡面規定的。方法有多種,你可以寫成xsize這種全部小寫,或者加"_"字元,如果你首位大寫不在第二位就沒問題了。

另外出現Unable to instantiate default tuplizer錯誤可能的原因:
是某個實體類中外加了某些getXX(),而不存在XX屬性,這時要在get上加@Transient,不持久 化它就行了


相關推薦

hibernate 特殊情況 屬性get方法解決方案

Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for pOrgID in class com.oarage.basedata.commons.entity.Unloa

Linux編譯驅動程式碼時smp_lock.h檔案到的解決方案

專案中有個驅動程式碼之前在老版本linux系統中編寫的 在移植到linux核心3.2.0後,編譯時出現一處錯誤“fatal error: linux/smp_lock.h: No such file or directory” 解決辦法是將 #include <linux/smp_lock.h&g

Android studio 真機調試時生成的文件到的解決方案

android 文件權限 真機調試 在用Android studio 開發時,用真實手機做測試,發現生成的文件會找不到。下面是我第一次碰到這個問題時,縮寫的代碼。public class MainActivity extends AppCompatActivity { @Override

uploadify在火狐上傳了的解決方案,java版(Spring+SpringMVC+MyBatis)詳細解決方案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring注入bean報錯 Error creating bean with name的網上到的解決方案

                        今天在研究Bas

/usr/bin/ld: 到 -lmsc----解決方案

系統的預設搜尋依賴庫路徑為,/usr/local/lib 在camkelists.txt檔案中對可執行檔案連結libmsc.so add_executable(iat_publish src/iat_publish.cpp src/speech_recognizer.c src/l

org.apache.http存在或到,解決方案

Android 6.0不再支援 Apache HTTP client。 請使用 HttpURLConnection 代替。如果遇到之前老程式碼執行不起來或者報錯怎麼辦呢,又不想寫新的程式碼。 Error:(19, 23) 錯誤: 程式包org.apache.htt

word中MathPage.wll或MathType.dll檔案到的解決方案(親測有效!)

在安裝了正版的mathtype 6.9b之後開啟word,竟然報了個mathpage.wll找不到的錯,於是乎逛了各大網站、部落格,一遍遍的試,不知道諸位是不是也和我一樣,屢次操作均是失敗。 但我的一次自行嘗試竟然解決了這個問題,其實解決的方法很簡單。因為由於版本的原因,網

建立web工程Spring配置檔案到問題解決方案

2017-11-18 17:09:24 org.apache.catalina.core.StandardContext listenerStart嚴重: Exception sending context initialized event to listener in

修改android studio中的avd sdk路徑、avd sdk到的解決方案

很多人都遇到安裝android studio之後需要下載gradle和重新下載avd sdk的問題 首先,設定環境變數,ANDROID_SDK_HOME值為sdk所在目錄,GRADLE_HOME值為gradle所在目錄,在path中新增%ANDROID_SDK_HOME

在Android Studio中到AppCompatActivity?解決方案

在建立新的.java檔案時,要匯入父類中的 AppCompatActivity,報錯,無法找到這個父類。 解決方案: 先找到“project structure”快捷鍵也可以,然後找到app--Dependencies,再點選右上角的“+”,出現如下圖所示

【sklearn】在anaconda匯入sklearn出現到integrate解決方案

出現問題: 在學習sklearn庫時,匯入包發現如下錯誤: ImportError: cannot import name 'integrate' 解決方案: 首先開啟anaconda pr

Unity_打包Android提示到jdk解決方案

Please make sure you have a suitable JDK installation.Android development requires at least JDK 7(1.7),having JRE only is not enoug

maven的webapp專案熱部署到eclipse,biz等子專案的jar包都到的解決方案

eclipse maven 這塊實在是太坑了。。。。右擊專案 到這裡,把本地倉庫的子專案jar加進去即可成功啟動tomcat... ( maven專案期初匯入eclipse都是正常的。當在webapp專案執行MavenClean目錄後就出現了這樣的問題)

更新SDK後ADT版本低支援,sdk到問題解決方案

在android_sdk_windows/tools/lib下的plugin.prop檔案裡被變更為 ? 1 2 3 4 5 # begin plugin.prop plugin.version=23.0.0 # end plugi

spring-boot專案mapperBean到問題解決方案

使用spring-boot整合mybatis時遇到了載入不到mapper類檔案bean的情況,網上找了最終終於解決了,我在這裡分享一下整個排查的流程並把網上哪些方法都進行一下彙總。錯誤截圖:上面這個截圖是maven install的時候報出的,大概意思就是沒有可用的Artic

macmysqldump到命令

出現 $path rmi port 找不到 添加 找到 路徑 .net 之所以會出現MySQL或者mysqldump這樣的命令找不到, 我們可以打開/usr/bin文件夾,發現bin目錄中並沒有mysql打頭的UEF文件, 而在/usr/local/mysql/bi

linux在關機情況新增硬盤的方法

span -s centos 沒有 space 註意 can 使用 echo 開機狀態插入硬盤 不關機執行命令 echo "- - -" > /sys/class/scsi_host/host0/scan 註意 echo "- - -" - 中間有空格

Ubuntuadb到裝置問題解決記錄

說在前面:   這個問題遇到的比較多,尤其是公司新來的一些小同事,特此記錄一下。   我們在ubuntu系統下可能會遇到adb devices搜尋不到裝置的情況,尤其是剛拿到一臺新測試裝置的情況下。但是是手機上可以識別usb連線。 這個時候我們先要確認以下兩點: 1.開發者模式是

mac clang++ 到標頭檔案 stdlib.h

因為要用 openmp庫,用 clang++ 編譯 c++程式,出現瞭如下報錯: clang++ xx.cpp -o xx -fopenmp /usr/local/Cellar/llvm/7.0.0/include/c++/v1/stdlib.h:94:15: fatal error: 'std