2 wf2311 wf2311 于 2015.06.30 16:54 提问

hibernate执行几次数据库查询就卡住

1.判断坐标编号no在项目里是否已存在

        public boolean isExist(Long projectId, int no) {
        Query query = baseDao.createQuery("select t.id from Position t where t.project.id = ? and t.no = ?");
        query.setParameter(0, projectId);
        query.setParameter(1, no);
        return (query.list().size() > 0) ? true : false;
    }

单独查询,刷新多少次多可以得到结果
2. 查询指定项目里的坐标的最大编号值

    public Integer getMaxNo(Long projectId) {
        Query query = baseDao.createQuery("select max(t.no) from Position t where t.project.id = ?");
        query.setLong(0, projectId);
        return (Integer) query.uniqueResult();
    }

单独查询,刷新多少次多可以得到结果

3.保存坐标信息

     public void saveOrUpdate(Position position, Long projectId) {
        try {
            if (projectId != null) {
                Project project = (Project) baseDao.findById(Project.class, projectId);
                position.setProject(project);
            }
            //如果指定坐标编号在当前项目里已存在
            if (isExist(position.getProject().getId(), position.getNo())) {
                //改变该指定坐标编号的值为当前项目里最大坐标编号的值+1
                position.setNo(getMaxNo(position.getProject().getId()) + 1);
            }
            baseDao.saveOrUpdate(position);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

测试本方法时,前2次都可以正常执行,到第3次时,网页就会卡住;如果注释掉第2个if语句,就可以一直正常执行

1个回答

u012736907
u012736907   2015.06.30 18:31

hibernate查询卡死一般是session打开太多加上没有及时关闭造成的,所以打开session最好用getCurrentSession(),,,,别用openSession()

Csdn user default icon
上传中...
上传图片
插入图片