Query的list()和iterate()方法的区别
来源:互联网 发布:淘宝订单清洗会降权吗 编辑:程序博客网 时间:2024/05/16 10:09
1.Query接口的list与iterate方法:
iterate()方法:
Return the query results as an Iterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].
Entities returned as results are initialized ondemand. The first SQL query returns identifiers only.
(返回的实体只有在使用时才会被初始化,执行该方法查询时只会返回实体的标识符(即id))
list()方法:
Return the query results as a List. If thequery contains multiple results pre row, the results are returned in aninstance ofObject[].
2.两者区别:
对于Query接口的list()方法与iterate()方法来说,都可以实现获取查询的对象,但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),而iterator()方法所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值。
3. 例:
Session session =sessionFactory.openSession();
Transaction tx =null;
//List<People> list = null;
Iterator<People> iter = null;
try
{
tx= session.beginTransaction();
Query query = session.createQuery("from People");
/*使用iterate方法
Iterator<People> iter = (Iterator<People>)query.iterate();
while(iter.hasNext())
{
session.delete(iter.next());
}
*/
//关于这两种删除数据库中的记录的方式的效率的对比(假如共查到5条记录):
// iterate()方法:执行6条select语句和5条delete语句
//list()方法:执行1条select语句和5条delete语句
// 此时list的效率比较高
//使用list方法
//list = (List<People>)query.list();
// for(Iterator<People> iter = list.iterator(); iter.hasNext();)
// {
// session.delete(iter.next());
// }
//在session关闭之前调用iterate方法在session关闭后再用iter访问people对象以证明iterate方法没有返回完整的对象
iter = (Iterator<People>)query.iterate();
tx.commit();
}catch(Exception ex)
{
if(null != tx)
{ tx.rollback();}
}finally
{session.close();}
//在session关闭之后就不可能再向数据库发送SQl语句来获取对象的属性(即填充完整对象),则会抛出SessionException异常提示"Session is closed!"
while(iter.hasNext())
{
System.out.println(iter.next().getId());
}
关于Query接口的其它方法,详见API帮助文档
转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8718437
- Query的list()和iterate()方法的区别
- Hibernate Query 的 list 和iterate方法缓存的区别
- Hibernate : Query.list()、Query.iterate()的区别
- query.list query.iterate的区别
- Hibernate 中Query的list方法和iterate方法
- Hibernate缓存体系之查询缓存(query cache),以及list和iterate方法的区别
- hibernate的query.iterate()与query.list()的区别(四)
- query.list()和query.iterate()区别
- query.iterate()和query.list()区别
- query.list()和query.iterate()区别
- query.list()和query.iterate()区别
- Hibernate:Query.list 与 Query.iterate 的区别
- hibernate的list和iterate的区别
- hibernate的list和iterate的区别
- hibernate的list和iterate的区别
- Hibernate中list()和iterate()的区别
- hibernate list和iterate的区别
- hiberante中List和Iterate的区别
- 思维逻辑的清晰
- VBS U盘插入提示
- vi/vim常用命令
- Kobject模型之linux内核源码
- Android 之 View(一)简单详述
- Query的list()和iterate()方法的区别
- 我对插入排序算法的理解。
- android22_Android的布局和Intent笔记和常用实例
- C语言第三次课堂作业
- RMQ poj3264
- vsftpd服务
- 自动循环播放图片
- 用URLLoader读取本地txt,xml等格式文件
- spring中基础核心接口介绍