• Hibernate 异常 Unable to instantiate default tuplizer


    .

    .

    .

    .

    .

    今天在做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类型的属性更要谨慎!

  • 相关阅读:
    RocketMQ消息模型
    RabbitMQ消息模型
    消息队列选择
    消息队列使用场景
    synchronized底层实现
    Java 内存模型
    MySql中的字符数据类型
    php页面编码与字符操作
    git学习总结
    SESSION机制
  • 原文地址:https://www.cnblogs.com/0xcafebabe/p/2423235.html
Copyright © 2020-2023  润新知