在HibernateDaoSupport的子类中有如下语句:List retValue=getHibernateTemplate().find("from ViewAttachAuth where 1=1"),其中ViewAttachAuth是自定义的实体对象,映射到数据库中的一个视图,按理说retValue应该是一个类型为ArrayList的对象,并且retValue中的每一个元素都是ViewAttachAuth对象,可是我在调试的时候发现返回对象的toString()方法得到的竟然是"com.sun.jdi.InvocationException occurred invoking method.",和普通的ArrayList对象的toString方法显然是不一样的,但是如果把它当做List接口来使用的话并不会出现问题,而如果System.out.println(retValue)的话则会出现java.lang.StackOverflowError堆栈溢出的错误,造成程序崩溃。综合网上的相关帖子以及自己使用Hibernate的经验初步断定这个现象和Hibernate的缓存以及延迟加载策略相关,不过ViewAttachAuth对应的视图中的记录并不多,只有四五条,在这么小的数据量的情况下Hibernate不至于启动二级缓存什么的吧,看来还得好好想想是怎么回事。
接下来的几分钟里我的脑海中一直出现一个字符串:toString,会不是toString这个方法本身的问题呢。按照这个思路我检查了我自己的实体类ViewAttachAuth,发现它的toString方法是下面这样定义的。
public String toString() {
return org.apache.commons.lang.ObjectUtils.toString(this);
}
于是我尝试着改成下面这样:
public String toString() {
StringBuffer sb=new StringBuffer("[");
sb.append("lsh="+getLsh()+",");
sb.append("aname="+getAname()+",");
sb.append("asize="+getAsize()+",");
sb.append("description="+getDescription()+",");
return sb.toString();
}
很不幸(^_^),问题解决了。于是我忍不住想看看org.apache.commons.lang.ObjectUtils.toString(Object obj)的源码,看看里面究竟有什么魔力让我的程序崩溃,接下来的一幕让我惊呆了,下面是ObjectUtils中toString方法的源码片段:
public static String toString(Object obj) {
return obj == null ? "" : obj.toString();
}
看到这里我最初的toString方法能引起程序崩溃也就不足为奇了:又是死循环!程序员的宿敌!
分享到:
相关推荐
解决Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException错误,tomcat远程调试
最近升级到2020.1,出现cannot load a jdk class: com.sun.jdi.Field 可以直接修改 修改前 IDEA_JDK_64=C:\Program Files\Java\jdk1.8.0_144 修改后 IDEA_JDK_64=C:\Program Files\JetBrains\IntelliJ IDEA 2019.3...
java 远程调试 一个朋友推荐,平时收集,希望能给需要帮助的人提供便利
git-2.19.0-64-bit,
基于分治思想,利用并查集实现LCA(最近公共祖先)算法
博文链接:https://tomshen.iteye.com/blog/192140
NULL 博文链接:https://tiamo.iteye.com/blog/1566477
最小二乘回归分析算法,可以动态调节运行环境的参数,DSmT证据推理的组合公式计算函数。
JDI, JDI是用于UI测试自动化的测试框架 用户界面测试自动化框架 JavaCI 软件包 版权所有( c ) 2017,EPAM系统许可证:GPL版本的GPL许可。简介JDI - 是UI测试自动化的测试框架。 它扩展了页面对
JDI JDI 让Android开发更简单 一.概述 JDI为一组android开发过程中可复用的组件和模式组成 二.JDI能做什么 目标:让开发人员只关注业务逻辑.加快开发速度 1.控件和事件动态绑定 jdi借鉴了ios输出口的概念,与其他框架...
主要介绍了IDEA实现远程调试步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
jdi - 一个JavaScript的文档生成器
sa-jdi-1.8.0.jar 位图BitMap
NULL 博文链接:https://fly-hyp.iteye.com/blog/1997213
Sbt Tools Jar插件查找并将JDK tools.jar添加到sbt的非托管jar中,从而可以访问Java调试器接口(JDI)。安装sbt 1.0 将以下内容添加到project/plugins.sbt : addSbtPlugin( " org.scala-debugger " % " sbt-jdi-...
(included in the JDK documentation bundle and on java.sun.com ) Note About sun.* Packages The Java Language Specification (DOWNLOAD) The Java Virtual Machine Specification (DOWNLOAD) -----------...
电子行业周报:OPPO Reno系列发布,JDI接受Suwa800亿日元支援.pdf
光学光电子行业动态周报:日本显示器公司JDI拟引入中资提升OLED产能.pdf
电子行业周报:苹果与高通重金和解,JDI续命却仍难翻身.pdf
电子行业周报:苹果官网体调降价格,JDI金援卡关困难重重.pdf