Hibernate Query接口 iterate()和list()方法的区别

list()方法

  • 无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存
  • Hibernate是通过一条Select SQL获取所有的记录。并将其读出,填入到POJO中返回.所以list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了)。所以返回的每个对象都是原本的对象。

iterate()方法

  • iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。所以返回的对象是代理对象。list方法需要1条SQL语句,iterate可能需要N+1条。
  • 可以充分利用缓存,可以对缓存读和写。返回对象的主键值,hibernate首先会根据这个id 在本地Cache 内寻找对应的数据,如果没找到,再去数据库中检索。如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。
    注:在Hibernate5,org.hibernate.query.Query包中,iterate()已经过时了,不推荐使用了。

你可能感兴趣的:(Hibernate)