Hibernate 异常org.hibernate.HibernateException: Unable to instantiate default tuplizer
2015-06-27 15:21
323 查看
今天在做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自动生成为下面这种形式:
把它们改成以下的形式就好了:
所以命名的时候一定要谨慎,尤其对于Boolean类型的属性更要谨慎!
第一种可能是缺少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类型的属性更要谨慎!
相关文章推荐
- 2014第二届ccf认证试题 题目 3 字符串匹配
- eclipse debug (调试) 学习心得
- JS浏览器兼容性处理
- FileZilla server windows 2003系统下适用的版本
- c3p0
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式
- 正则表达式工具类
- html---textarea初始化时就有个table空格以及tab键操作无效
- 秋叶PPT-三分钟教程
- oracle删除表中的重复数据
- MySQL基础笔记(一) SQL简介+数据类型
- MySQL基础笔记(一) SQL简介+数据类型
- ZigBee终端入网方式深入分析
- shell 水平测试
- ZOJ Problem Set - 1006 Do the Untwist
- 最短路(最短路径)
- 递归与递推实现斐波那契数列算法
- 小小知识
- AngularJS中的模块(module)
- 简单的XSS攻击