Hibernate iterate和list方法的区别

String hql = "from Student";  Query query = session.createQuery(hql);

对于这条语句的查询:

List<Student> stus = query.list();

会把所有的查询结果放到list中。一次加载到内存。

语句:select student0_.id as id3_, student0_.studentage as studentage3_, student0_.studentname as studentn3_3_ from Student student0_//当执行list方法的时候

Iterator<Student> stus = query.iterate();

该语句只把ID的值放到迭代器中,当遍历的时候,会根据ID的值再去数据库中查。并且该语句会产生N+1次查询。

语句1:select student0_.id as col_0_0_ from Student student0_  //当执行iterate方法的时候

语句2:select student0_.id as id3_0_, student0_.studentage as studentage3_0_, student0_.studentname as studentn3_3_0_ from Student student0_ where student0_.id=?//遍历获取值的时候

这两个方法各有千秋。请根据具体情况选择使用(牺牲内存或者牺牲网络资源)。

相关推荐