ITEEDU

Hibernate Gossip: Query.list()、iterator()

Query上有list()与iterate()方法,两者的差别在于开启Query快取之后,list()方法在读取数据时,会利用到Query快取,而iterate()则不会使用到Query快取功能,而是直接从数据库中再查询数据。

来看看下面的程序:
Session session = sessionFactory.openSession();
        
Query query = session.createQuery("from User");
query.setCacheable(true);
List users = query.list();
users = query.list();

session.close();
这个程序片段会使用一次SQL来查询数据库,第二次直接从Query快取中取得数据:
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_
使用iterate()方法时不会使用到Query快取,例如:
Session session = sessionFactory.openSession();
	
Query query = session.createQuery("from User");
query.setCacheable(true);
Iterator users = query.iterate();
users = query.iterate();

session.close();
这个程序片段会使用两次SQL向数据库查询:
Hibernate: select user0_.id as col_0_0_ from user user0_
Hibernate: select user0_.id as col_0_0_ from user user0_