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;
}
单独查询,刷新多少次多可以得到结果
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语句,就可以一直正常执行
hibernate查询卡死一般是session打开太多加上没有及时关闭造成的,所以打开session最好用getCurrentSession(),,,,别用openSession()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。