错误随手记_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 错误随手记

错误随手记

 2010/12/11 11:32:02  miman2008  http://miman2008.javaeye.com  我要评论(0)
  • 摘要:1.今天在一个DAO中尝试对一个数据执行先查询再更新的操作,结果后台提示出现了sql语句Hibernate:selectgroup_idfromfnd_groupidwhereid=?Hibernate:updatefnd_groupidsetgroup_id=?whereid=?本来是很简单的一个操作,但是数据库里面的值却始终不更新。之前的代码如下:SQLQueryquery=this.getSession().createSQLQuery
  • 标签:错误

1.今天在一个DAO中尝试对一个数据执行先查询再更新的操作,结果后台提示出现了sql语句?

?Hibernate:??????????????select group_id from fnd_groupid where id= ?
Hibernate:??????????? ?update fnd_groupid set group_id= ? where id = ?

本来是很简单的一个操作,但是数据库里面的值却始终不更新。

之前的代码如下:

   SQLQuery query = this.getSession().createSQLQuery("select group_id from fnd_groupid where id= ?");
   query.setLong(0, 1L);
   Long nextVal = StringTools.parseLong(query.uniqueResult().toString());
   SQLQuery queryUpdate = this.getSession().createSQLQuery("update fnd_groupid set group_id= ? where id = ? ");
    queryUpdate.setLong(0, nextVal+1);
    queryUpdate.setLong(1, 1l);
    queryUpdate.executeUpdate();

?

后来google一下,才发现我的操作很有问题,我连续取出当前会话进行操作,前面的查询操作可以进行,但是此时会话还在进行中,我后面再次取到当前会话,并执行更新操作,这个操作始终无法完成。多次操作应该使用事务,只有提交事务之后才会生效。这其中涉及到hibernate的一级缓存机制。

这说明埋头写代码真的没啥用,原理的东西很多尚待研究,任重而道远~~

修改后的代码如下:

	Session session = this.getSession();
		Transaction transaction = session.beginTransaction();//启动事务
		SQLQuery query = session.createSQLQuery("select group_id from fnd_groupid where id= ?");
		query.setLong(0, 1L);
		Long nextVal = StringTools.parseLong(query.uniqueResult().toString());
		
		SQLQuery queryUpdate = session.createSQLQuery("update fnd_groupid set group_id= ? where id = ? ");
		queryUpdate.setLong(0, nextVal+1);
		queryUpdate.setLong(1, 1l);
		queryUpdate.executeUpdate();
		transaction.commit();
		session.close();
		return nextVal;

?

?

发表评论
用户名: 匿名