.
.
.
.
.
今天在做Hibernate和Spring整合,在一張表中多添加了三個字段,它們的類型分別是INT、BIT和DATETIME,然后手動修改了實體類和.hbm.xml,啟動單元測試的時候遇到了一個問題,控制台上報出了一大堆異常和堆棧信息,嵌套到最終的一個異常是Unable to instantiate default tuplizer,於是開始在Google上查相關資料,查了很久,查出了幾種可能導致該異常的方法,於是將其記錄下來,分享給遇到同樣問題的網友。
第一種可能是缺少javassist.jar包,下面給出下載地址。
http://mirrors.ibiblio.org/pub/mirrors/maven/javassist/jars/javassist-3.0.jar
第二種可能是hibernate.cfg.xml的mapping配置錯誤,仔細檢查這個文件,把有錯誤的先注釋掉再試試。
第三種可能是某個實體類中外加了某些getXX(),而不存在XX屬性,這時要在get上加@Transient,不持久化它就行了。或者是實體表或映射表中屬性寫的不一致導致的,所以要細心檢查實體類、.hbm.xml和數據庫之間的屬性名、字段名還有類型是否寫錯了。
結果我按照上面三種情況都做了檢查也沒有發現問題,最后發現了一個問題:那個BIT字段的屬性名有點特殊,private Boolean isInvalid;,結果在設置getter()方法和setter()方法時被MyEclipse自動生成為下面這種形式:
1 public Boolean isInvalid() {
2 return isInvalid;
3 }
4
5 public void isInvalid(Boolean isInvalid) {
6 this.isInvalid = isInvalid;
7 }
把它們改成以下的形式就好了:
1 public Boolean getIsInvalid() {
2 return isInvalid;
3 }
4
5 public void setIsInvalid(Boolean isInvalid) {
6 this.isInvalid = isInvalid;
7 }
所以命名的時候一定要謹慎,尤其對於Boolean類型的屬性更要謹慎!