首页 > 试题广场 >

请问Query接口的list方法和iterate方法有什么区

[问答题]
请说明Query接口的list方法和iterate方法有什么区别?
1.返回的类型不一样,list返回List,iterate返回iterator
2.查询策略不同。获取数据的方式不一样,list会直接查询数据库,iterate会先到数据库中把id取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1
3.iterate会查询2级缓存,list只会缓存,但不会使用缓存(除非结合查询缓存)。
4.list中返回的list中每个对象都是原本的对象,iterate中返回的对象是***对象
发表于 2019-04-27 22:29:57 回复(0)
对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。
发表于 2019-03-04 23:15:39 回复(0)
①list()方法无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存;iterate()方法可以充分利用缓存,如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。 ② list()方法不会引起N+1查询问题,而iterate()方法可能引起N+1查询问
发表于 2019-05-02 00:57:09 回复(0)


对于Query接口的list()方法与iterator()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。
发表于 2019-04-26 21:48:27 回复(0)
①list()方法无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存;iterate()方法可以充分利用缓存,如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。 ② list()方法不会引起N+1查询问题,而iterate()方法可能引起N+1查询问题
编辑于 2019-04-26 20:45:18 回复(0)
对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。
发表于 2019-04-25 18:05:30 回复(0)