Query.list() 和 Query.Iterate() 的区别

本文详细对比了Hibernate中Query接口的list()与iterate()方法的区别。list()方法返回完整对象,而iterate()仅返回主键值,按需加载实体属性。此外,还介绍了这两种方法在缓存管理上的不同之处。

iterate()方法
Return the query results as an Iterator. If the query contains multiple results pre row, the results are returned in aninstance of Object[]. Entities returned as results are initialized ondemand. The first SQL query returns identifiers only.
(返回的实体只有在使用时才会被初始化,执行该方法查询时只会返回实体的标识符(即id))

list()方法
Return the query results as a List. If the query contains multiple results pre row, the results are returned in aninstance of Object[].

 

区别:

对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值

 

list: 结果存入缓存,但不从缓存里面取;查询时属性连同id一起找出来,只有一句select;

iterate:结果存入缓存,并在缓存中查找结果;查询时先找出所有的 id,然后根据 id 到缓存里面查找,如果没有命中,再到数据库中查找该id对应的其他属性。可能会有多行 select。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值