When you use iterate() to execute a query, Hibernate retrieves only the primary key (identifier) values in the first SQL select; it tries to find the rest of the state of the objects in the cache, before querying again for the rest of the property values. This technique can be used to optimize loading in specific cases.