修改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直接当字符串处理。因此,后期修改时,只修改常量的值是没有用的。
在将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直接当字符串处理。因此,后期修改时,只修改常量的值是没有用的。
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- ASP.NET中实现根据匿名类、datatable、sql生成实体类
- 深入理解Hibernate中的flush机制
- 解析使用jdbc,hibernate处理clob/blob字段的详解
- 浅析java程序中hibernate的应用总结
- 关于Hibernate的一些学习心得总结
- java中实体类和JSON对象之间相互转化
- Hibernate管理Session和批量操作分析
- 基于spring+hibernate+JQuery开发之电子相册(附源码下载)
- java Hibernate 一对多自身关联问题