ssh架构中数据访问的异常
时间:2008-06-22 09:35:29
来源:论坛整理 作者: 编辑:chinaitzhe
代码如下:
/**
* 使用对象的查询方法
* @param c:查询的类
* @param obj:查询的对象
* @param orber:按那个字段排序
* @param row:每页多少条记录
* @param page:第几页
* @return List: 集合
*/
public List find(Class c, Object obj, String[] order, int row, int page)
{
//用spring的类创建session
Session session = this.getSession();
Criteria criteria = session.createCriteria(c);
criteria.setMaxResults(row);//最大显示记录数
criteria.setFirstResult((page-1)*row);//从第几条开始
if (obj != null)
{
Example example=Example.create(obj);
example.enableLike(MatchMode.ANYWHERE);//匹配模式,使用模糊查询必填项。
criteria.add(example);
}
//判定是否有排序请求,假如有加入到排序方法中
if (order != null)
{
for (int i = 0; i < order.length; i )
criteria.addOrder(Order.desc(order[i]));
}
return criteria.list();
}
开始使用查询都很正常,但是使用3-5次后就会挂起不动了。经调试发现程序挂在最后一句上return criteria.list();
这个是criteria的bug。还是我的用法有误?请教各位。
网友回复:我在方法中加了一个垃圾回收System.gc()。效果好了很多。但还是偶然出错。从新刷新又可以用了。但是还是觉得不稳定。。。。
不知道根本的原因是什么?
网友回复:没有人知道吗?我自己顶一个。
网友回复:我怎么没看到的close()方法呢??
你去看看你的数据库连接吧,是不是已经满了!!!
或者是不是有数据库死锁产生了!
网友回复:同意3楼意见,在return前加句"session.close();"
网友回复:很感谢3楼的意见。
我试了
List list=criteria.list();
session.close();
return list;
这样可以,但是有个问题。session关闭后。假如返回的集合中多对一或一对多关系,关闭session就无法取得通过
类似userinfo.getBm().getName()这样的方法取得另外一个实体对象。因为这些实体对象是存在session中的。
网友回复:写个健壮的数据库连接程序
网友回复:经过这段时间,发现正解是关闭延时加载功能就ok。因为,默认延时加载是打开的,当我们criteria.list()时,它是不会去读取对象中的对象属性的。因为延时加载会在调用这个属性对象的时候才会去数据库读取。所以当我们关闭session时,实际上只得到了list,而不会得到list中包含对象的对象属性。
网友回复:sping opensessioninviewfilter
网友回复:该回复于2008-05-01 06:27:46被版主删除
关键字:ssh,架构,数据,访问,异常,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面