什么时候会出现N+1问题?
在hibernate中,当进行一个表的查询时,当这个表与另外的表是多对一,或者是一对多关联时,就会出现N+1问题,当查询一条语句时,比如主键name=1,而与这个name相关联的另一张表对应name的有N个记录,这时就出另外发出N条语句去查询,而我又不要那些记录,这时就是N+1问题。 即: 1)1对多,在1方,查找得到了n个对象, 那么又需要将n个对象关联的集合取出,于是本来的一条sql查询变成了n+1条
解决方法: 1。设置lazy=true; 2.在本类DTO中有关联另外表的表对象的声明,在他的get方法上面加上一个@fetch=fetchtype.lazy; 3.在关联的类上面设置@batchsize=2;这时就只发出两条语句。 4.用SQL来查询,写SQL语句时就写成联合查询的形式。 |
转载于:https://www.cnblogs.com/bjameng/archive/2011/12/04/2276262.html