`
yzz9i
  • 浏览: 216877 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

hibernate 中怎么执行update操作

阅读更多
我想了好多种办法,一开始我想在dao层直接getHibernateTemplate().find("hql")但是结果是出错了,还有一种我之前可以用的那种:就是在业务成实现类里面创建类对象保存起来在缓存里面用set.属性值 保存,但是结果是给lock了。

现在的解决办法是在dao层:

String hqlString="update TbAds set state = " + 1 + " where adsId = " +id;

Query query=getSession().createQuery(hqlString);

query.executeUpdate();
分享到:
评论
14 楼 sidubi 2011-06-30  
<pre name="code" class="java">this.getHibernateTemplate().execute(new HibernateCallback(){
          public Object doInHibernate(Session session) throws HibernateException, SQLException {
session.createQuery("update  TbAds set st........").executeUpdate();
                 return null;
   }});
</pre>
<p> </p>
13 楼 yizhilong28 2011-05-24  
yzz9i 写道
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();
		}

结果可以对任意一条信息进行状态的设置了。。
(--
为什么会被锁住 ?可能会是缓存的设置问题..?










是不是使用了事务读写缓存?
12 楼 dsjt 2011-05-24  
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();
		}


你们是按代码行数算绩效的吗?


来我们公司吧,给你看一天旧代码,你就会见怪不怪了!
11 楼 871656094 2011-05-23  
回答主题:
HibernateTemplate.saveOrUpdate(Object instance)
10 楼 gaohenggaoheng 2011-05-23  
不要直接操作session(getSession),使用spring提供的getHibernateTemplate是最好的.
如果使用了,需要release
9 楼 iday 2011-05-23  
bulkupdate(hsql)
8 楼 skycray 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
7 楼 zhao_chong 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其间的改动将被持久化到数据库中)。
6 楼 wenlongzh 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();
		}


你们是按代码行数算绩效的吗?
5 楼 duronshi 2011-05-23  
楼主不会想表达的是批量修改操作吧?

原来有5条记录,现在修改成3条记录?

给你个笨方法,在一个事务里面,先删除,在插入,呵呵
4 楼 yzz9i 2011-05-23  
aflyer 写道
... 基础很重要啊!

确实.
3 楼 yzz9i 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();
		}

结果可以对任意一条信息进行状态的设置了。。
(--
为什么会被锁住 ?可能会是缓存的设置问题..?









2 楼 aflyer 2011-05-22  
... 基础很重要啊!
1 楼 jk19910410 2011-05-22  
将update好的对象HibernateTemplate.merge("TableName",entity);就行了,更新操作怎么能用find()方法呢?

相关推荐

    hibernate操作数据库笔记

    //该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...

    Hibernate+中文文档

    10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两...

    hibernate3.2中文文档(chm格式)

    10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两...

    Hibernate中文详细学习文档

    10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两...

    Hibernate 中文 html 帮助文档

    10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)结果 10.4.1.4. 绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) ...

    最全Hibernate 参考文档

    10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)结果 10.4.1.4. 绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) ...

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    博文链接:https://limaofa.iteye.com/blog/212727

    HibernateAPI中文版.chm

    10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两...

    hibernate基础 二 关联映射 级联操作

    hibernate 的基础 常用的主键生成策略 持久化对象的三种状态 一级缓存的常用操作(save/update/saveOrUpdate/delete)一对多关联映射 级联操作

    第24次课-1 Spring与Hibernate的整合

    Spring提供的持久层访问的方式,无须显式地打开和关闭Session,也无须在代码中执行任何的事务操作语句。 Spring提供了HibernateTemplate,用于持久层访问。它只要获得SessionFactory的引用,就可以智能地打开Session...

    hibernate 教程

    操作持久化数据(Manipulating Persistent Data) 9.1. 创建一个持久化对象 9.2. 装载对象 9.3. Querying 9.3.1. 标量查询(Scalar query) 9.3.2. 查询接口(Query interface) 9.3.3. 可滚动迭代...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类...

    Hibernate与数据库的触发器协同工作

     1、触发器使 Session 的缓存中的持久化对象与数据库中对应的数据不一致:触发器运行在数据库中, 它执行的操作对 Session 是透明的 Session 的  解决方案: 在执行完 Session 的相关操作后, 立即调用 Session 的...

    Hibernate注释大全收藏

    上述实体映射到数据库中的时候对应 Order 实体Bean, 其具有 id, lastUpdate, lastUpdater 三个属性。如果没有@MappedSuperclass 注解,则父类中属性忽略,这是 Order 实体 Bean 只有 id 一个属性。 映射实体Bean的...

    hibernate3.04中文文档.chm

    11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 11.4.1.3. 标量(Scalar)结果 11.4.1.4. 绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable ...

    Hibernate教程

    11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 11.4.1.3. 标量(Scalar)结果 11.4.1.4. 绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable ...

    hibernate 体系结构与配置 参考文档(html)

    执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)结果 10.4.1.4. 绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) ...

    ssh(structs,spring,hibernate)框架中的上传下载

    所以要完成对Lob字段的操作,Hibernate必须执行两步数据库访问操作,先Insert再Update。  使用BlobByteArrayType字段类型后,为什么我们就可以象一般的字段类型一样操作Blob字段呢?可以确定的一点是:...

    Hibernate3+中文参考文档

    10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)结果 10.4.1.4. 绑定参数 10.4.1.5. 分页 10.4.1.6. 可滚动遍历(Scrollable iteration) ...

    struts2+hibernate文件上传以及连接数据库操作

    strtus2+hibernate文件上传及连接数据库操作,使用模拟http请求测试的,验证类是updateTest类,文件上传类是uplodController,连接数据库的操作时productController类

Global site tag (gtag.js) - Google Analytics