首先两种最大的区别就是利用缓存上的区别.
list只能利用查询缓存(session.setCacheable(true).list());无法利用二级缓存.
注意:Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。
譬如:SELECT c.id, c.name FROM Cat AS c WHERE c.name = 'you' ;不会填充缓存.
虽然list不能利用二级缓存,但是可以把查询到的对象写入二级缓存.
iterator 会利用二级缓存
iteratro()的查询过程
SELECT id FROM cat;
SELECT * FROM cat WHERE id = ?;
SELECT * FROM cat WHERE id = ?;
SELECT * FROM cat WHERE id = ?;
......
因为list一次把所有数据取出来,它不会先去取主键,所有利用不了二级缓存