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=?//遍历获取值的时候
这两个方法各有千秋。请根据具体情况选择使用(牺牲内存或者牺牲网络资源)。