您的位置:首页 > 编程语言 > Java开发

修改Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError

2015-06-23 12:28 483 查看
问题描述:

      在将Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError,但是明明是有这个方法的,但是一直说没有这个方法。后经仔细对比字节码文件,发现jdk在编译字节码时,会对相关方法进行处理。

详细编译情况如下:

原始代码:

    net.setPushstatus(Integer.parseInt(pushstatus));

实体类属性字段类型为int 时编译的代码:

    net.setPushstatus(Integer.parseInt(pushstatus));

实体类属性字段类型为Integer时编译的代码:

    net.setPushstatus(Integer.valueOf(Integer.parseInt(pushstatus)));

在将int转换为Integer过程中,凡是调用该字段的set方法的类,都会悄悄的进行重新编译。因此,需要将编译后的新的class文件进行重新发布。

类似问题:

    1、使用 static final 关键字定义的静态常量,如果该常量的值日后需要改变,那么需要把使用到这个常量的所有class文件进行重新发布。

     原因:静态常量在编译时会被jdk直接当字符串处理。因此,后期修改时,只修改常量的值是没有用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息