今天我想讲一下我前几天面试遇到的一个hibernate问题:hibernate list和iterate 的区别。由于平时多用list,所以没有注意,结果没有答出来。回去之后看了一下API。大致理解如下:
query.list();
Return the query results as a List . If the query contains multiple results pre row, the results are returned in an instance of Object[].大致意思是说返回一个list集合。如果查询包含多个结果前行,返回的是一个object[]的实例
query.iterate();
Return the query results as an Iterator, If the query contains multiple results pre row, the results are returned in an instance of Object[]
Entities returned as results are initialized on demand. The first SQL query returns identifiers only
与list不同之处就是后面的那一句。返回的结果需要初始化,the first sql查询返回的是对象的标识。
说到底,2者的区别主要是:
list():查询的时候会缓存对象(如果用了2级缓存的话),但是不是使用2级缓存,会使用一级缓存。用list()是会直接查询数据库活动结果。
iterate():会用到2级缓存,当调用iterate()方法的时候,会查询出所有实体的id,当真正需要使用某个对象的时候,他会先去缓存中查找,如找不到,会以id为查询条件去数据库里面查找,会再发出一条SQL。这也就是典型的n+1现象
其次,二者的返回类型不一样。list返回List,iterate返回Iterator。
分享到:
相关推荐
今天我们将探讨的是Hibernate的二级缓存,特别是`list`和`iterate`方法的区别,这对于优化数据库访问性能至关重要。 一级缓存是Hibernate内置的,它是Session级别的缓存,自动管理实体对象的生命周期。然而,一级...
提供的源码`s2sh_relation23_list_iterate`可能包含了演示如何使用Hibernate进行查询和遍历结果的实例。通过阅读和运行这些代码,你可以深入理解`list()`和`iterator()`在实际项目中的应用。 总之,理解和掌握`...
关于iterate和list的使用,由于无法确保查询条件的重复性,通常很难保证iterate能充分利用缓存。而且,iterate可能会导致1+N问题,因为即使有缓存,每次迭代时仍需检查数据库是否存在新数据。相比之下,list在某些...
本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有记录的查询及显示功能。 #### 二、技术背景介绍 1. **Struts**:Struts是一个开源的MVC(Model-View-Controller)框架,主要用于简化Web应用...
Query 对象提供了许多方法来查询持久化对象,例如 list、iterate 等。Query 对象可以根据不同的条件来查询持久化对象。 Hibernate 的核心接口分别是 Configuration、SessionFactory、Session、Transaction 和 Query...
一.使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化... (7).createQuery(String HQL).list()/iterate()/uniqueResult(); //HQL(Hibernate Query Language)语句查询
`find` 和 `iterate`: 这两个方法都用于执行HQL(Hibernate Query Language)查询。`find`返回一个List集合,一次性将所有结果加载到内存,适合于小规模数据的查询。而`iterate`返回一个迭代器,每次调用`next()`...
总的来说,合理利用Hibernate的二级缓存可以极大地提升系统性能,但同时也需要注意缓存管理和一致性问题,避免出现数据不一致和内存资源浪费。在实际开发中,应根据具体的应用场景和数据特性来设计和优化缓存策略。
`单端代理的批量抓取.PNG` 可能讲解了如何通过Hibernate的批处理技术提高性能,如设置批处理大小,利用Session的flush模式,以及Query的iterate()和list()方法的区别。批量操作可以减少数据库交互次数,提升应用性能...
Iterator iterator = session.createQuery("from Order").iterate(); while (iterator.hasNext()) { Order order = (Order) iterator.next(); // 处理每个Order对象 } ``` ##### 2. OID方式(Object ...
- `list()`、`uniqueResult()`、`iterate()`等方法处理查询结果。 3. **更新(Update)** - 修改对象的属性,然后调用`Session`的`update()`方法将对象的状态同步到数据库。 - 或者,先`load()`或`get()`对象,...
### HIBERNATE_QUERY知识点详解 #### 一、概述 Hibernate作为一款强大的对象关系映射...以上就是关于Hibernate查询机制的相关知识点介绍,通过这些方法和技术,开发者可以根据具体的应用需求选择最合适的查询方式。
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
不同的操作,如`list`、`load`和`iterate`,对缓存的使用策略不同。`list`操作不会使用缓存,而`iterate`会先查询所有ID,然后逐个从缓存或数据库加载对象。 在Ehcache配置中,`maxElementsInMemory`定义了缓存中...
**Hibernate4 学习笔记** Hibernate4 是一个流行的开源对象关系映射(ORM)框架,它简化了Java...在实际开发中,合理配置和使用二级缓存、选择合适的查询方法以及理解load和get的区别,都能显著提升数据库操作的效率。
List()和iterate查询的主要区别在于,List每次都会查询SQL并放入缓存,而iterate在缓存中不存在数据时可能出现N+1问题。 `get()`和`load()`方法都会利用一级缓存,当对象被加载到Session时,数据首先会被存入缓存而...
3. **检索**: `Session`的`get()`、`load()`方法获取单个实体,`list()`, `scroll()`, `iterate()`用于查询结果集。 4. **删除**: 使用`Session`的`delete()`方法删除实体。 5. **事务处理**: 在事务边界内执行...