`
yzz9i
  • 浏览: 221525 次
  • 性别: 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执行原生sql语句

    在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    "hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip" 是一个针对Eclipse的Hibernate工具集更新包,包含了对4.1.1.Final版本的增强和优化,为开发者提供了更加便捷的Hibernate操作界面和功能。...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    - **数据库操作**:支持直接在IDE内执行SQL语句,查看和修改数据库数据,方便进行数据调试和管理。 - **HQL/SQL编辑器**:提供对Hibernate查询语言(HQL)和标准SQL的语法高亮和自动完成,有助于编写准确无误的...

    hibernatetools-Update-4.1.1.zip

    开发者可以直接在IDE内进行Maven操作,无需离开开发环境,这在多模块大型项目中尤其重要。 还有就是代码生成工具,它可以根据设计模式自动生成符合规范的Java代码,如贫血模型或富模型,以及相应的持久化逻辑。在...

    Hibernate update问题

    当你从数据库加载一个对象,修改其属性,然后调用`update()`方法,Hibernate会根据对象的状态自动执行相应的SQL UPDATE语句。然而,如果对象不在Session缓存中,`update()`方法可能会失效,因为Hibernate无法跟踪...

    Hibernate merge、update与saveOrUpdate方法的区别

    在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现在对实体状态的处理方式上。 #### 1. `merge` 方法 `...

    hibernate 执行原生sql的几种方式

    本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...

    Hibernate执行持久层访问步骤

    在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将深入探讨Hibernate执行持久层访问的详细...

    hibernate 的saveOrUpdate

    如果对象的ID已知且在Session缓存中不存在,那么它会被认为是需要更新的对象,执行`update`操作。 3. **事务处理**:在进行数据库操作时,`saveOrUpdate`通常需要在一个事务内执行,以确保数据的一致性。如果不在...

    Hibernate操作持久化对象

    这个类展示了如何使用Hibernate的简单操作,如`get()`, `add()`, `del()`, 和 `update()`方法,这些方法调用了基类的抽象方法,进一步简化了DAO层的实现。 在Hibernate中,对象的状态分为瞬时状态、持久状态和脱管...

    hibernate环境搭建基本操作封装

    在IT行业中,Hibernate是一个非常流行的Java...总之,搭建Hibernate环境并进行基本操作封装是Java开发中的常见任务。通过理解并实践上述步骤,你可以有效地管理和操作数据库,同时享受到Hibernate带来的便捷和效率。

    hibernate中文帮助文档

    5. **CRUD操作**: Hibernate提供了便捷的方法进行创建(Create)、读取(Retrieve)、更新(Update)和删除/Delete)操作,如`save()`, `load()`, `update()`, `delete()`等。 6. **HQL与QBC**: Hibernate查询语言(HQL)...

    hibernate操纵实体对象

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它简化了数据库操作,使得开发者能够更专注于业务逻辑而不是底层的数据存储。在这个主题“hibernate操纵实体对象”中,我们将探讨如何使用Hibernate来创建、...

    hibernate中文文档 HTML格式

    3. 异步操作:通过使用Hibernate的异步API,可以在后台线程中执行数据库操作,不阻塞主线程。 4. 事件监听:可以注册监听器来响应特定的ORM事件,如对象的保存、更新或删除。 在“Hibernate中文文档 HTML格式”中,...

    hibernate数据库相关操作步骤

    Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的简便方法。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向对象的方式来管理和操作数据。本文将...

    Hibernate中文Api最新参考文档

    此外,Hibernate还提供了事件监听器和拦截器机制,允许自定义操作,如在对象加载、保存或删除前后执行特定逻辑。 总之,Hibernate中文API最新参考文档将帮助开发者掌握如何利用Hibernate的各类功能,实现高效、灵活...

    hibernate 简单CRUD操作

    在Hibernate中,我们可以便捷地进行这些操作。 1. **创建(Create)** - 在Hibernate中,我们首先需要配置Hibernate的主配置文件(hibernate.cfg.xml),包括数据库连接信息、方言、缓存等。 - 创建实体类,这个...

    Hibernate基本增删改CRUD操作

    本教程将深入讲解如何使用Hibernate进行基本的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD操作。 ### 1. Hibernate环境搭建 首先,我们需要在项目中引入Hibernate的依赖库,通常...

    hibernate执行外部sql

    在IT行业中,数据库操作是应用程序开发的核心部分,而Hibernate和MyBatis作为两个流行的Java持久层框架,都提供了与数据库交互的能力。本篇文章将详细探讨如何利用Hibernate来执行外部SQL文件,实现类似于MyBatis的...

    Hibernate中的DAO模式

    在**Hibernate中的DAO模式**中,DAO类负责处理数据库的相关操作,如查询、插入、更新和删除数据。DAO类通常包含一组方法,每个方法对应一种数据库操作。例如,`save()`方法用于保存对象到数据库,`update()`方法用于...

Global site tag (gtag.js) - Google Analytics