HIbernate关键代码位置导致的堆栈溢出问题记录&分析&解决

    在我回到公司的第一周周五,远程连接客户服务器,查找我们系统无法正常工作的原因。

    在查看日志时,发现服务器端日志输出信息有很多重复着Hibernate某个类某行代码的异常。

    Hibernate官网文章链接:

    https://forum.hibernate.org/viewtopic.php?p=2385576
    https://hibernate.onjira.com/browse/HHH-2166

    查看以上链接的文章之后,才明白:

    在Hibernate现有的依赖JAR包中,该类的实现方式下:当检索where column in (...)语句类似的操作时,如果In语句中包含的项超过了1W项,则:对应检索方法实现会加大递归次数,最终导致了堆栈溢出!

    在Hibernate官网以上链接中提供了解决方案,优化了这个循环递归的类,当我将新的改进类放入九厂项目主工程下并编译之后,将其覆盖掉hibernate3.jar中对应的.class文件,重新运行项目,发现一切都解决了!

    当时请教了Deng老大,他说:如果以上方式无法解决,我们就在对应的出现错误的方法位置,获取到connection对象,然后纯JDBC方式操作这些in 子项很多的条件检索记录项。(有些疑问:由于这个Hibernate操作类多处[几乎所有地方]都用到了,那么我岂不是要重写所有的方法吗?)
    还好使用hibernate官方提供的改进类之后,系统可以正常运行起来了!


    至于放入hibernate3.jar的方法,首先在主工程中创建一个与之同级的package目录,然后重新编译项目之后,就出现一个该NodeTraverser的Class字节码文件了,此时将hibernate3.jar用解压缩工具打开,然后替换相应位置下的该字节码文件即可!【简略位置如下图】


   





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值