精华帖 (0) :: 良好帖 (0) :: 新手帖 (19) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-22
现在的解决办法是在dao层: String hqlString="update TbAds set state = " + 1 + " where adsId = " +id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-22
将update好的对象HibernateTemplate.merge("TableName",entity);就行了,更新操作怎么能用find()方法呢?
|
|
返回顶楼 | |
发表时间:2011-05-22
... 基础很重要啊!
|
|
返回顶楼 | |
发表时间:2011-05-23
jk19910410 写道 将update好的对象HibernateTemplate.merge("TableName",entity);就行了,更新操作怎么能用find()方法呢?
对。我实现的功能是对每条信息的状态设置。 如果用的是merge, 它可以对单独的一条信息进行设置(如:运行、暂停 操作) 没问题,再进行另外一条信息操作时候就会 被锁住而报错.. 我也不知道是为什么.. 我就在业务层这么写的: TbAds tbAds=tbAdsDAO.findById(id); if (sta==1) { tbAds.setState(0); tbAdsDAO.merge(tbAds); } else { tbAds.setState(1); tbAdsDAO.merge(tbAds); } 之后我就把业务层调用该dao层方法 改在dao层写: if (sta==1) { String hqlString=" update TbAds set state = " + 0 + " where adsId = " + id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } else { String hqlString="update TbAds set state = " + 1 + " where adsId = " +id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } 结果可以对任意一条信息进行状态的设置了。。 (-- 为什么会被锁住 ?可能会是缓存的设置问题..? |
|
返回顶楼 | |
发表时间:2011-05-23
aflyer 写道 ... 基础很重要啊!
确实. |
|
返回顶楼 | |
发表时间:2011-05-23
楼主不会想表达的是批量修改操作吧?
原来有5条记录,现在修改成3条记录? 给你个笨方法,在一个事务里面,先删除,在插入,呵呵 |
|
返回顶楼 | |
发表时间:2011-05-23
最后修改:2011-05-23
TbAds tbAds=tbAdsDAO.findById(id); if (sta==1) { tbAds.setState(0); tbAdsDAO.merge(tbAds); } else { tbAds.setState(1); tbAdsDAO.merge(tbAds); } if (sta==1) { String hqlString=" update TbAds set state = " + 0 + " where adsId = " + id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } else { String hqlString="update TbAds set state = " + 1 + " where adsId = " +id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } 你们是按代码行数算绩效的吗? |
|
返回顶楼 | |
发表时间:2011-05-23
Hibernate对象的三种状态
瞬时的(Transient) 由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时的(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。如果瞬时对象在程序中没有被引用,它会被Java垃圾回收器(garbage collector)销毁。 使用Hibernate Session可以将其变为持久(Persistent)状态(Hibernate会自动执行必要的SQL语句)。 持久的(Persistent) 一个持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session的作用范围内。Hibernate会检测到处于持久状态的对象的任何改动,在当前操作单元执行完毕时将对象的状态同步到数据库,开发者不需要手动执行UPDATE语句。同样的,将一个对象变为瞬时(Transient)状态,也不需要手动执行DELETE语句。 分离的(Detached) 与持久对象关联的Session被关闭后,对象就变为分离的(Detached)的。 对分离对象的引用仍然是有效的,对象可以继续被修改。分离对象如果重新关联到某个新的Session上, 会再次转变为持久的(在Detached其间的改动将被持久化到数据库中)。 |
|
返回顶楼 | |
发表时间:2011-05-23
wenlongzh 写道 TbAds tbAds=tbAdsDAO.findById(id); if (sta==1) { tbAds.setState(0); tbAdsDAO.merge(tbAds); } else { tbAds.setState(1); tbAdsDAO.merge(tbAds); } if (sta==1) { String hqlString=" update TbAds set state = " + 0 + " where adsId = " + id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } else { String hqlString="update TbAds set state = " + 1 + " where adsId = " +id; Query query=getSession().createQuery(hqlString); query.executeUpdate(); } 你们是按代码行数算绩效的吗? ++1 |
|
返回顶楼 | |
发表时间:2011-05-23
bulkupdate(hsql)
|
|
返回顶楼 | |