`

Hibernate HQL示例十二:DML更新、删除及与Hibernate持久化更新

阅读更多

DML更新及删除

示例:

package com.bjsxt.hibernate;

import junit.framework.TestCase;

import org.hibernate.Query;
import org.hibernate.Session;

public class DMLQueryTest extends TestCase {
	
	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			/**
			 * 使用这种风格的操作,将会造成内存中的对象与数据库中的数据不同步,所以
			 * 建议尽量少使用:因为hibernate有一级缓存,而更新不更新缓存的数据,只是更新了数据库的数据。
			 * 应尽量用hibernate的update操作
			 */
			Query updateQuery =  session.createQuery("update Student a set a.name=? where a.id in(:ids)");
			updateQuery.setParameter(0, "张三");
			updateQuery.setParameterList("ids", new Object[]{1, 2});
			updateQuery.executeUpdate();
			
			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
	public void testQuery2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
//			Query updateQuery =  session.createQuery("delete from Student s where s.id='1'");
			Query updateQuery =  session.createQuery("delete from Student s where s.id=?").setParameter(0, 2);
			updateQuery.executeUpdate();
			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
}

 

我们要更新数据或删除数据,一般会先通过load/get/list查询等使对象进入持久状态,然后直接调用set方法更改属性,hibernate会自动发出一条更新语句进行更新操作。如

public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			List list = session.createQuery("select s from Student s where s.id=3").list();
			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				Student object = (Student) iterator.next();
				System.out.println(object.getName());
				object.setName("yeyeyeye");
				
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

 

上例中查询出来的name值的Student对象进入持久状态,马上调用了setName方法执行时的sql:

Hibernate: select student0_.id as id1_, student0_.name as name1_, student0_.createTime as createTime1_, student0_.classid as classid1_ from t_student student0_ where student0_.id=3
gooooeeeeood
Hibernate: update t_student set name=?, createTime=?, classid=? where id=?
上面:gooooeeeeood为原来的name值,再次查询数据库时name变成了yeyeyeye

 

分享到:
评论

相关推荐

    hibernate课程源码.

    Session是Hibernate中与数据库进行交互的主要接口,用于保存、更新、删除和检索持久化对象。学习这个模块,你会理解如何创建Session,打开和关闭事务,以及执行CRUD操作。 2. **004_Hibernate_HQL**: Hibernate查询...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate3.6 文档(pdf 格式)

    - **简单的 POJO 示例**:通过实例展示如何创建满足 Hibernate 持久化需求的简单 POJO 类。 - **实现继承**:讨论如何利用 Hibernate 支持的继承映射策略来映射继承结构。 - **实现 equals() 和 hashCode()**:确保...

    Hibernate+中文文档

    14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取...

    Hibernate+Mysql使用实例

    由于这些组件未包含在本实例中,所以重点将集中在如何仅使用Hibernate与MySQL进行数据持久化。 **Hibernate核心概念** 1. **实体(Entities)**: 实体类是映射到数据库表的Java类,它们通过注解或XML配置文件与...

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

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Hibernate中文详细学习文档

    符合Java习惯的关系数据库持久化 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. ...

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

    HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6....

    Hibernate 中文 html 帮助文档

    14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. ...

    安博Hibernate最全培训资料内部版

    - **HQL**(Hibernate Query Language)是一种面向对象的查询语言,用于执行对持久化对象的检索操作。 - **特点**: - **面向对象**:HQL查询的对象是对象而非数据库表,支持多态性。 - **区分大小写**:HQL中的...

    Hibernate参考文档

    14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1. 创建一个Criteria 实例 15.2. 限制结果集内容 15.3. 结果集排序 15.4. 关联 15.5. 动态关联抓取 15.6. ...

    java 项目实例开发代码.rar

    - **持久化(Persistence)**:使用注解或XML配置文件将Java对象映射到数据库表。 - **会话(Session)**:提供临时对象和数据库之间的一致性,负责对象的创建、保存、删除以及查询。 - **查询(Criteria/Query)...

    亚太面试总结

    在Hibernate中,映射文件中的`insert`、`update`和`inverse`属性用于控制实体对象的持久化行为: 1. **`insert=false`** 表示该字段不会在执行插入操作时被包含,即字段值不会被持久化到数据库中。 2. **`update=...

Global site tag (gtag.js) - Google Analytics