关于Hibernate的List

请问如下两种方法,哪种较好:
1.
Query q = session.createQuery("from Cat as c");
List l = q.list();
for (int i=0; i< l.size(); i++) {
Cat c = (Cat)l.get(i);
int id = c.getId();
String name = c.getName();
System.out.println(id+" "+name);
}

2.
Query q = session.createQuery("select c.id, c.name from Cat as c");
List l = q.list();
Object[] row = new Object[2];
for (int i=0; i< l.size(); i++) {
row = l.get(i);
Integer id = (Integer) row[0];
String name = (String) row[1];
System.out.println(id+" "+name);
}

2比1快

建议加上jcs,用
Query q = session.createQuery("from Cat as c");
q.iterate();

请问怎么加jcs

在hbm文件中,加入
<jcs-cache usage="read-write"/>



<jcs-cache usage="read-write"/>

谢谢bruce

不知道为什么,我用jcs跟没有用没有什么区别。

是啊,我发现我在hbm.xml中写不写上[jcs-cache usage="read-only"/]查询时间都一样

第一次查询
Begin time is 0
Hibernate: select post0_.id as x0_0_ from post post0_
Hibernate: select post0_.id as id, post0_.userid as userid from post post0_ where post0_.id=?
End time is 2281

第二次查询
Begin time is 0
Hibernate: select post0_.id as x0_0_ from post post0_
End time is 2625

第三次查询
Begin time is 0
Hibernate: select post0_.id as x0_0_ from post post0_
End time is 1766

时间差不多吧,不过第二次第三次没出现sql语句,是不是jcs起作用了?但是我明明在post.hbm.xml中没有使用[jcs-cache usage="read-only"/]这个tag


附读函数
public void readDB(Session session){
String sql = "select post from com.test.my.Post as post";
long begintime = System.currentTimeMillis();
System.out.println("Begin time is 0 ");
try{
Query query = session.createQuery(sql);
//List myList=query.list(); //据说用List Jcs无效
Iterator myIter=query.iterate();
}catch (HibernateException ee){
ee.printStackTrace();
}
long endtime=System.currentTimeMillis();
System.out.println("End time is "+(endtime-begintime));
}

找一个字段非常多,数据量比较大的表测试。

你的JCS已经开始工作了。

只有Iterator能读JCS,List不会去读JCS,你可以到Hibernate中文论坛精华区看我的Hibernate Iterator JCS分析贴。

那篇文章我看了,有一些问题
1.我在对应的类的描述文件hbm.xml中没加[jcs-cache "read-only"]这个hibernate会自动调用jcs来cache吗?

2.Iterator myIter=Query.Iterator()后,遍历这个Iterator特别慢,如果已经放到cache中去了,为什么还会这么慢

谢谢

1. 不会

2. 可能数据量不够,性能差距拉不开。我在数据量不是很大的情况下测试MySQL, Iterator JCS速度不如JDBC,你可以到我那里看看性能版我贴的一个测试结果。

BTW. 建议去Hibernate中文论坛讨论,这里我照顾不太到。