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

Hibernate更新部分字段的3种方法

阅读更多

Hibernate 中如果直接使用
Session.update(Object o);
会把这个表中的所有字段更新一遍。

比如:

 

public class TeacherTest {
	@Test
	public void update(){
		Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Teacher t = (Teacher) session.get(Teacher.class, 3);
		t.setName("yangtb2");
		session.update(t);
 
		session.getTransaction().commit();
	}
}

 

Hibernate 执行的SQL语句:

 

Hibernate: 
    UPDATE
        Teacher 
    SET
        age=?,
        birthday=?,
        name=?,
        title=? 
    WHERE
        id=?

我们只更改了Name属性,而Hibernate 的sql语句 把所有字段都更改了一次。
这样要是我们有字段是文本类型,这个类型存储的内容是几千,几万字,这样效率会很低。
那么怎么只更改我们更新的字段呢?
有三中方法:
1.XML中设置property 标签 update = “false” ,如下:我们设置 age 这个属性在更改中不做更改

 

 

<property name=”age” update=”false”></property>

在Annotation中 在属性GET方法上加上@Column(updatable=false)

 

@Column(updatable=false)
    public int getAge() {
        return age;
    }

我们在执行 Update方法会发现,age 属性 不会被更改

Hibernate:
    UPDATE
        Teacher
    SET
        birthday=?,
        name=?,
        title=?
    WHERE
        id=?

缺点:不灵活····
2.第2种方法··使用XML中的 dynamic-update="true"

 

<class name="com.sccin.entity.Student"  table="student" dynamic-update="true"/>

OK,这样就不需要在字段上设置了。
但这样的方法在Annotation中没有
3.第三种方式:使用HQL语句(灵活,方便)
使用HQL语句修改数据

 

 

public void update(){
		Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Query query = session.createQuery("update Teacher t set t.name = 'yangtianb' where id = 3");
		query.executeUpdate();
		session.getTransaction().commit();
	}

 

Hibernate 执行的SQL语句:
Hibernate:
    update
        Teacher
    set
        name='yangtianb'
    where
        id=3

 

这样就只更新了我们更新的字段······

分享到:
评论

相关推荐

    Hibernate更新某些字段

    例如,在下面的代码中,我们使用 Session.update(t) 方法更新 Teacher 对象的 Name 属性: ```java public class TeacherTest { @Test public void update(){ Session session = HibernateUitl....

    Hibernate_query查询数据表中部分字段.

    以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体的Java对象上。这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这...

    Hibernate读取blob字段

    例如,假设我们有一个`Image`实体类,其中包含一个`imageData`字段用于存储Blob类型的图像数据,映射文件的部分内容可能如下所示: ```xml ... ... ``` `type="binary"`表明该字段是Blob类型,`...

    Hibernate操作数据库大字段的示例(附源码及详细开发使用方法)。

    1. **保存/更新大字段**:在保存或更新实体时,使用SessionFactory的`save()`或`update()`方法,Hibernate会自动处理大字段的存储。 ```java Session session = sessionFactory.openSession(); Transaction tx = ...

    Hibernate识别数据库特有字段实例详解

    本文以添加Interval类型支持为例,说明为Hibernate添加特有数据类型支持的方法。 Hibernate提供了丰富的数据类型支持,但对于部分数据库专有的数据类型,提供的支持就很有限了。比如PostgreSQL的Interval类型,对于...

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    Hibernate3.x总结

    Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 应用程序中的对象映射到数据库表及其字段上,从而简化了数据访问层的开发工作。本节主要介绍 Hibernate3.x 的基本配置和启动流程。 ##### 1...

    Spring3+Struts2+Hibernate3 全注解集成开发

    1. 配置:尽管大部分配置可以通过注解完成,但仍需在Spring的`Application Context`中配置数据源、Hibernate的SessionFactory以及Struts2的插件。 2. 测试:单元测试和集成测试是确保代码质量的重要环节,可以使用...

    Hibernate实战

    实体管理是Hibernate中的重要部分,书中会详细介绍如何定义实体类,使用注解来声明属性与数据库字段的映射,以及如何实现对象的生命周期管理,包括瞬时态、持久态、托管态和游离态。此外,还会讲解实体间的一对一、...

    hibernate3-[annotations-commons-annotations].rar

    它是使用Hibernate进行开发时必不可少的部分,提供了对数据库的基本操作支持,如实体的创建、更新、删除和查询。 接下来,我们重点讨论`hibernate3-annotations.jar`。这是Hibernate3引入注解支持的扩展库,使得...

    Hibernate 3 注解技术讲解

    总之,Hibernate 3的注解技术是现代Java应用开发中的一个重要组成部分,它提高了开发效率,简化了数据库操作。通过学习和掌握这些注解,开发者能够更好地利用Hibernate实现ORM,从而专注于业务逻辑,而非繁琐的数据...

    Hibernate,hibernate笔记

    `hibernate.hbm2ddl.auto`可以设置为"create-drop"、"create"、"update"或"validate",分别对应在启动时创建/删除数据库结构、创建数据库结构、更新数据库结构或验证数据库结构。 3. **HQL(Hibernate Query ...

    hibernate3项目所需的架包总结

    总之,"hibernate3.6.10.zip"压缩包是SSH项目中不可或缺的一部分,它包含了实现Hibernate3所有功能的库文件,能够帮助开发者轻松地进行数据库操作,是Java Web开发中的得力工具。了解并熟练掌握Hibernate的使用,将...

    hibernate动态更新

    在Java的持久化框架Hibernate中,动态更新是一种优化策略,用于提高数据更新的效率。当一个对象的部分属性被修改时,传统的做法是先从数据库中加载该对象的完整信息,再将新值设置到对应的属性上,最后更新整个对象...

    关于struts2和hibernate的部分注解解释

    ### 关于Struts2与Hibernate的部分注解解释 在现代软件开发中,特别是Java Web应用领域,Struts2、Hibernate以及Spring Data JPA等技术框架因其高效性和灵活性而备受青睐。本文将详细介绍这些框架中的一些关键注解...

    hibernate-annotations-3.4.0.GA

    而Hibernate Annotations是Hibernate框架的一个重要组成部分,它引入了基于注解的元数据,使得代码更加简洁、易读。本篇将详细探讨Hibernate Annotations 3.4.0.GA版本中的核心概念、特性以及实际应用。 一、...

    Hibernate3.1_学习源码

    02 02Hibernate_UseMyEclipse: 利用工具来配置使用Hibernate,注意要修改的内容部分。 03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的...

Global site tag (gtag.js) - Google Analytics