Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1368507
  • 博文数量: 13833
  • 博客积分: 1041400
  • 博客等级: 大元帅
  • 技术积分: 127080
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-13 10:12
文章分类

全部博文(13833)

文章存档

2008年(13833)

我的朋友

分类:

2008-06-13 10:25:21

执行下列代码:=====================================================Session session=sessionFactory.openSession(); //add a vote with active=falseTransaction tx = session.beginTransaction();VoteQuestion vote=new VoteQuestion();vote.setText("test");vote.setActive(false);session.save(vote);tx.commit();int voteId=vote.getId().intValue(); //批处理:set all vote active=truetx = session.beginTransaction();Query query = session.createQuery("update VoteQuestion v set v.active=:isActive");query.setBoolean("isActive", true);query.executeUpdate();tx.commit(); //重新获取刚才添加的vote来check active,如果=true,表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive()); session.close();===================================================== 执行上面代码,输出的应该是true,但实际输出的为false!! 如果我们的代码改一下:=====================================================。。。。。 //批处理:set all vote active=truetx = session.beginTransaction();Query query = session.createQuery("update VoteQuestion v set v.active=:isActive");query.setBoolean("isActive", true);query.executeUpdate();tx.commit(); //比上面的代码只多了下面2行session.close();session=sessionFactory.openSession(); //重新获取刚才添加的vote来check active,如果=true,表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive()); session.close();===================================================== 如果我们在批处理之后close session,然后再新开一个session来获取update vote,则输出就是true,BINGO!!这说明在同一个session里,批处理操作在session close之前不会更新,即使tx.commit!!(呵呵,这样解释觉得怪怪的,但一时想不到更好的) 但如果每次批处理都要先关闭session,再开一个新session,也不是很好,更完美的解决方法是使用session.flush and session clear(好像两个方法都要调用) =====================================================。。。。。 //批处理:set all vote active=truetx = session.beginTransaction();Query query = session.createQuery("update VoteQuestion v set v.active=:isActive");query.setBoolean("isActive", true);query.executeUpdate(); //比最初的代码只多了下面2行session.flush();session.clear(); tx.commit(); //重新获取刚才添加的vote来check active,如果=true,表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive()); session.close();===================================================== 
阅读(13) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~