public PageModel findByPageScroll(String hql, int firstPage, int maxPage,String action) {
PageModel pm = new PageModel();
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createQuery(hql);
query.setFirstResult(firstPage);
query.setMaxResults(maxPage);
ArrayList list=(ArrayList) query.list(); //这里没问题
Iterator iterator1 = list.iterator();
int approvalID;
String approvalName;
String approvalresult = null;
LeaveOrOtKindbean st;
List<LeaveOrOtKindbean> list1 = new ArrayList<LeaveOrOtKindbean>();
while (iterator1.hasNext()){
st = new LeaveOrOtKindbean();
Object[] object = (Object[]) iterator1.next();
LeaveOrOt l=(LeaveOrOt) object[0];
LeaveOrOtKind lk=(LeaveOrOtKind) object[1];
User u =(User) object[2];
approvalName=findUsername(l.getApprovalID1()); //调用了下一个方法
st.setApprovalName(approvalName);
list1.add(st);
}
pm.setRecordsDate( list1);
pm.setAction(action);
pm.setTotal(((Long)QueryCount.getQueryCount(hql, session)).intValue());
pm.setCurrentPage(firstPage);
pm.setManPage(maxPage);
session.clear();
session.close();
return pm;
}
public String findUsername(int id){ //通过id 获得user表的name
String hql="from User u where u.userId="+id;
Session session=this.getHibernateTemplate().getSessionFactory().openSession();
Query query=session.createQuery(hql);
List<User>list=query.list(); //这条运行的很慢 要9秒
String name=list.get(0).getName();
session.clear();
session.close();
return name;
}
求大神 给个决解办法
------解决方案--------------------
乱归乱,并不应该9秒才返回一个使用id的查询。
------解决方案--------------------
while (iterator1.hasNext()){
st = new LeaveOrOtKindbean();
Object[] object = (Object[]) iterator1.next();
LeaveOrOt l=(LeaveOrOt) object[0];
LeaveOrOtKind lk=(LeaveOrOtKind) object[1];
User u =(User) object[2];
approvalName=findUsername(l.getApprovalID1()); //每次循环都打开一个新的session,连接池都会爆掉,不慢才怪
st.setApprovalName(approvalName);
list1.add(st);
}
还是采用spring的代理类来管理事务吧,不会百度
------解决方案--------------------
你这个可能是session上出的问题,你可以配置直接使用getCurrentSession代替openSession,配置TransactionManager,让spring管理session试试。