this.getHibernateTemplate().find(hql)联表查询(多对多)无响应,导致程序挂掉的问题

今天在做项目解决BUG时,遇到一个小小的问题,发现用这个this.getHibernateTemplate().find(hql)方
法查询时,总会无响应,程序挂掉了,伤脑筋,就算改为了用SQL语句查询也是同样的问题,只能寻求帮助,在此把解决问题经验写出来,以便以后有查阅和分享。

一、this.getHibernateTemplate().find(hql)查询数据可能存在的问题

假设数据库有两张表分别为A和B,A和B是多对多的关系,关系维护方是表A,那么在用hibernate的
this.getHibernateTemplate().find(hql)联表查询时,如果表A关联的表B内容条数过多,而在表A中对表B
内容的加载策略设置为了急加载(Fetch.EAGER),那么查询可能就会发生无响应,程序不往下执行的问题,此时需要将加载策略改为懒加载(Fetch.LAZY),程序才能继续执行。

二、懒加载与急加载区别

如果是Fetch.LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候从数据库中加载。但是,在session外,就不能再取了。用Fetch.EAGER时,因为在内存里,所以
在session外也可以取。如果是Fetch.EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中。

本文标题:this.getHibernateTemplate().find(hql)联表查询(多对多)无响应,导致程序挂掉的问题

文章作者:zhaoqing

发布时间:2018年03月09日 - 16:03

最后更新:2018年03月16日 - 10:03

原始链接:https://zqhf.github.io/2018/03/09/article1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!