请教hibernate query iterator的问题

07-11-23 cscs31
小弟在用hibernate的query的时候,在获取数据的时候用iterator获取数据,可是很奇怪在第一次能够获取出数据,可是第二次再执行的时候,只能获取到类的实例,但是实例中的属性都是null。用list好像就没有问题。

看了一下网上说,因为list没有用二级缓存,而iterator会先取id然后从缓从中加载,我大致感觉应该是缓存的问题。

不知道hibernate中我想使用iterator这种方式应该怎么写?

代码如下

sb = new StringBuffer();

sb.append("From SbBlogitems as b ");

sb.append("join b.smUsers as u ");

sb.append("Where u.id = :userId ");

hql = sb.toString();

Query q = getSession().createQuery(hql);

q.setInteger("userId", userId); q.setFirstResult((pageInfo.getCurrentPageNo() - 1)

* pageInfo.getPagesize());

q.setFetchSize(pageInfo.getPagesize());

Iterator blogItems = q.iterate();

while (blogItems.hasNext()) {

Object[] items = (Object[])blogItems.next();

//此处第二次为一个空实例

SbBlogitems bi = (SbBlogitems)items[0];

}

banq
2007-12-03 11:25
二级缓存如果你特别配置,不会起作用.

你前后两次加载,需要考虑中间其他操作,另外需要将Hibernate的lazy 加载考虑进去.

cscs31
2007-12-03 16:52
>>你前后两次加载,需要考虑中间其他操作

中间几乎没有操作,就相当于一个列表,我点第一次没问题,再点一次就有问题了

那么我写的程序有问题吗?

猜你喜欢