今天在做项目解决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,那么表示取出这条数据时,它关联的数据也同时取出放入内存中。