`
zuiyanwangyue
  • 浏览: 167494 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

com.sun.jdi.InvocationException不一定就是Hibernate的错

阅读更多

在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方法能引起程序崩溃也就不足为奇了:又是死循环!程序员的宿敌!

1
4
分享到:
评论
2 楼 u014676619 2016-03-31  
     
完美的解决了我的问题。真的没有想到是这个toStrring().....
1 楼 LQW_小文 2014-11-20  
哈哈,  ,看了你写的,解决了我的问题。Thank You!

相关推荐

    解决java远程调试ClosedConnectionException错误

    解决Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException错误,tomcat远程调试

    打开Intellij Idea 2020.1 提示 cannot load a jdk class: com.sun.jdi.Field

    最近升级到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 远程调试一个朋友推荐

    这种方式可以有效解决由于部署环境差异导致的问题定位困难,尤其是在分布式系统和微服务架构中,远程调试更是必不可少的技能之一。 ### Java远程调试的重要性 1. **环境一致性**:通过远程调试,开发人员可以在与...

    sa-jdi.jar.zip

    标题中的"sa-jdi.jar.zip"是一个压缩文件,它包含了名为"sa-jdi.jar"的Java可执行 jar 文件。在Java开发中,JAR(Java Archive)文件是用于打包类库、资源文件以及应用程序的二进制文件。这种格式允许将多个文件组合...

    LCA.zip_C++_JDI_LCA_lca并查集_分治思想

    然后比较这两个根节点,如果它们是同一个节点,那么这个节点就是LCA;如果不是,则LCA是它们的共同祖先,即它们的根节点的父节点。 4. 优化查询效率:为了进一步提高查询速度,可以使用预处理的方法,如Tarjan's O...

    How to connect to remote MB Server using WMBT?

    博文链接:https://tomshen.iteye.com/blog/192140

    nui_qm24.zip_qm24?com_qm24com

    它扩展了传统的概率论,允许处理不确定性和不完整信息。DSmT的核心是信念函数,它不仅表示单个事件的概率,还表示一组事件的联合信念。在组合公式中,DSmT提供了处理来自不同来源的证据冲突的方法,通过Dempster's ...

    eclipse中远程调试tomcat应用

    在IT行业中,Eclipse是一款广泛使用的Java开发集成环境,它为开发者提供了丰富的功能,包括代码编辑、调试、构建以及版本控制等。Tomcat是Apache软件基金会的开源项目,是一个流行的Java Servlet容器,常用于部署和...

    javac-source-code-reading:javac源码调试-java source code

    - **JDI (Java Debugger Interface)**:利用 JDI 进行远程调试,可以深入到 javac 的内部运行过程。 - **Javadoc**:阅读官方文档,了解各个类和方法的功能。 - **单元测试**:查看并运行源码中的测试用例,有助于...

    JAVA最新反编译工具及配置过程

    import com.sun.jdi.ClassLoaderReference; import com.sun.jdi.VirtualMachine; import com.sun.jdi.VirtualMachineManager; import com.sun.jdi.connect.*; import com.sun.jdi.event.EventSet; import ...

    jdk1.8的src,扩展了sun.reflect,unsafe

    在JDK 1.8中,包含了`com`、`apple`、`org`、`launcher`、`java`、`jdk`、`sun`等目录,这些都是Java标准库的主要组成部分。通过查看源码,开发者可以了解这些包中的类和方法的具体实现,比如`java.util`包中的集合...

    JDI, JDI是用于UI测试自动化的测试框架.zip

    JDI, JDI是用于UI测试自动化的测试框架 用户界面测试自动化框架 JavaCI 软件包 版权所有( c ) 2017,EPAM系统许可证:GPL版本的GPL许可。简介JDI - 是UI测试自动化的测试框架。 它扩展了页面对

    jdk tools.jar包

    再如,com.sun.jdi(Java Debug Interface)类库则是Java远程调试接口,允许开发者编写自定义的调试工具。 此外,tools.jar还包含了如com.sun.javadoc、com.sun.tools.attach等其他类库,它们分别用于生成API文档和...

    JDK1.6源码 JAVA

    `com.*`和`sun.*`等非公开的包提供了Oracle特定的实现和扩展,虽然不推荐直接使用,但研究这些源码可以帮助我们理解JDK的一些特殊功能,如`sun.misc.Unsafe`提供了对内存操作的直接访问。 6. **启动器** `...

    一个jsp的eclipse开发

    - **com.sun.jdi.request**:封装了调试客户端可以向 JVM 发起的请求,如断点请求、类加载请求等。 其中,与断点相关的接口主要包括: - **BreakpointEvent**:表示 JVM 执行到断点时触发的事件。 - **...

    JDI:JDI,让Android开发更简单

    JDI JDI 让Android开发更简单 一.概述 JDI为一组android开发过程中可复用的组件和模式组成 二.JDI能做什么 目标:让开发人员只关注业务逻辑.加快开发速度 1.控件和事件动态绑定 jdi借鉴了ios输出口的概念,与其他框架...

    电子行业周报:OPPO Reno系列发布,JDI接受Suwa800亿日元支援.pdf

    电子行业周报中重点提到了OPPO Reno系列的发布和JDI接受Suwa800亿日元的支援两大事件,以下是这两件事情的具体分析: 1. OPPO Reno系列发布 OPPO Reno系列的发布,是OPPO广东移动通信有限公司推出的新一代旗舰手机...

    IDEA实现远程调试步骤详解

    - `suspend=n`:表示不暂停JVM启动,允许程序立即运行(如果设置为`suspend=y`,则会等待调试器连接后再运行)。 - `address=5005`:指定调试端口。 - 对于**war包项目**,通常是在Tomcat等应用服务器中运行,...

    如何debug你的Polish程序

    <echo>exe: jdb -connect com.sun.jdi.SocketAttach: hostname=${hostname}, port=${port} <arg line="jdb -connect com.sun.jdi.SocketAttach: hostname=${hostname}, port=${port}"/> ``` 在上面的示例中...

Global site tag (gtag.js) - Google Analytics