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
这样就只更新了我们更新的字段······
分享到:
相关推荐
例如,在下面的代码中,我们使用 Session.update(t) 方法更新 Teacher 对象的 Name 属性: ```java public class TeacherTest { @Test public void update(){ Session session = HibernateUitl....
以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...
本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体的Java对象上。这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这...
例如,假设我们有一个`Image`实体类,其中包含一个`imageData`字段用于存储Blob类型的图像数据,映射文件的部分内容可能如下所示: ```xml ... ... ``` `type="binary"`表明该字段是Blob类型,`...
1. **保存/更新大字段**:在保存或更新实体时,使用SessionFactory的`save()`或`update()`方法,Hibernate会自动处理大字段的存储。 ```java Session session = sessionFactory.openSession(); Transaction tx = ...
本文以添加Interval类型支持为例,说明为Hibernate添加特有数据类型支持的方法。 Hibernate提供了丰富的数据类型支持,但对于部分数据库专有的数据类型,提供的支持就很有限了。比如PostgreSQL的Interval类型,对于...
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 应用程序中的对象映射到数据库表及其字段上,从而简化了数据访问层的开发工作。本节主要介绍 Hibernate3.x 的基本配置和启动流程。 ##### 1...
1. 配置:尽管大部分配置可以通过注解完成,但仍需在Spring的`Application Context`中配置数据源、Hibernate的SessionFactory以及Struts2的插件。 2. 测试:单元测试和集成测试是确保代码质量的重要环节,可以使用...
实体管理是Hibernate中的重要部分,书中会详细介绍如何定义实体类,使用注解来声明属性与数据库字段的映射,以及如何实现对象的生命周期管理,包括瞬时态、持久态、托管态和游离态。此外,还会讲解实体间的一对一、...
它是使用Hibernate进行开发时必不可少的部分,提供了对数据库的基本操作支持,如实体的创建、更新、删除和查询。 接下来,我们重点讨论`hibernate3-annotations.jar`。这是Hibernate3引入注解支持的扩展库,使得...
总之,Hibernate 3的注解技术是现代Java应用开发中的一个重要组成部分,它提高了开发效率,简化了数据库操作。通过学习和掌握这些注解,开发者能够更好地利用Hibernate实现ORM,从而专注于业务逻辑,而非繁琐的数据...
`hibernate.hbm2ddl.auto`可以设置为"create-drop"、"create"、"update"或"validate",分别对应在启动时创建/删除数据库结构、创建数据库结构、更新数据库结构或验证数据库结构。 3. **HQL(Hibernate Query ...
总之,"hibernate3.6.10.zip"压缩包是SSH项目中不可或缺的一部分,它包含了实现Hibernate3所有功能的库文件,能够帮助开发者轻松地进行数据库操作,是Java Web开发中的得力工具。了解并熟练掌握Hibernate的使用,将...
在Java的持久化框架Hibernate中,动态更新是一种优化策略,用于提高数据更新的效率。当一个对象的部分属性被修改时,传统的做法是先从数据库中加载该对象的完整信息,再将新值设置到对应的属性上,最后更新整个对象...
### 关于Struts2与Hibernate的部分注解解释 在现代软件开发中,特别是Java Web应用领域,Struts2、Hibernate以及Spring Data JPA等技术框架因其高效性和灵活性而备受青睐。本文将详细介绍这些框架中的一些关键注解...
而Hibernate Annotations是Hibernate框架的一个重要组成部分,它引入了基于注解的元数据,使得代码更加简洁、易读。本篇将详细探讨Hibernate Annotations 3.4.0.GA版本中的核心概念、特性以及实际应用。 一、...
02 02Hibernate_UseMyEclipse: 利用工具来配置使用Hibernate,注意要修改的内容部分。 03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的...