使用hibernate的update方法,会自动更新全部字段。
有两种方法可以解决你的问题
1.在更新之前把要更新的对象读出来。再设置你要改的值;
2.用HQL来执行
如果有字段在插入库之后就不会再变。
如:记录的创建时间。可以在hbm文件中。写上:
<property name="createTime" type="java.util.Date" column="createTime" update="false"/>
则使用hibernate的update不会更新该字段;
---------------------------------------
robbin 对于这个问题的回答 http://www.jdon.com/jivejdon/thread/8571.html
看这个link:
http://www.jdon.com/jive/thread.jsp?forum=62&thread=8457
引用------------------------------------------------------------
update语句是在Hibernate的Configuration的时候生成的,不能动态改变
为什么update的时候所有的属性都一起update,而不是只更新改变字段,其实这是一个比较值得探讨的问题。
如果想要做到只更新改变了的字段,必须做到两点:
1、对PO的每个属性设置version进行状态跟踪
2、update语句是动态生成的,在实际向数据库更新的时候,依次检查每个属性的version,决定哪些属性需要更新,动态构造update语句。
单单要做到上述第一点,就势必要给PO的操作带来沉重的负担,每次属性的存取都要判断version,严重影响PO的性能。会带来整个Hibernate性能的降低。而要做到第二点,临时构造update语句时间消耗很客观,也会极大降低update的速度。
Hibernate的PO状态管理是当任何属性值改变的时候,version就被标记,表明PO被更新了。实现很简单而有效,效率非常高。而update语句insert,delete和某几个select语句是在Hibernate初始化过程中就构造好了,不需要用的时候临时构造。
综合评价得与失,对PO属性进行状态管理固然可以稍微降低数据库负担,但是会极大影响Hibernate的运行效率,终究得不偿失。
只提供这么个思路, 行不行试试才能知道。
分享到:
相关推荐
Hibernate 更新某些字段 Hibernate 是一个基于 Java 的 ORM 框架,它提供了对数据库的操作接口。在实际开发中,我们经常需要更新数据库中的某些字段,而不是所有字段。那么,如何使用 Hibernate 实现更新某些字段呢...
本文将深入探讨如何使用Hibernate进行数据表中的部分字段查询,这在实际开发中是非常常见的需求。 首先,理解Hibernate的核心概念:实体(Entity)、持久化类(Persistent Class)和映射文件(Mapping File)。实体...
例如,假设我们有一个`Image`实体类,其中包含一个`imageData`字段用于存储Blob类型的图像数据,映射文件的部分内容可能如下所示: ```xml ... ... ``` `type="binary"`表明该字段是Blob类型,`...
本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体的Java对象上。这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这...
Hibernate识别数据库特有字段实例详解 ...Hibernate提供了丰富的数据类型支持,但对于部分数据库专有的数据类型,提供的支持就很有限了。比如PostgreSQL的Interval类型,对于保存一个”时间段”数据
1. **保存/更新大字段**:在保存或更新实体时,使用SessionFactory的`save()`或`update()`方法,Hibernate会自动处理大字段的存储。 ```java Session session = sessionFactory.openSession(); Transaction tx = ...
### 关于Struts2与Hibernate的部分注解解释 在现代软件开发中,特别是Java Web应用领域,Struts2、Hibernate以及Spring Data JPA等技术框架因其高效性和灵活性而备受青睐。本文将详细介绍这些框架中的一些关键注解...
### Hibernate4实战之第五部分:Hibernate的事务与并发 #### 一、事务基础概念 **事务(Transaction)** 是一组逻辑上紧密相连的操作集合。在数据库领域,事务具备ACID特性: - **原子性(Atomicity)**:事务内的所有...
`hibernate.hbm2ddl.auto`可以设置为"create-drop"、"create"、"update"或"validate",分别对应在启动时创建/删除数据库结构、创建数据库结构、更新数据库结构或验证数据库结构。 3. **HQL(Hibernate Query ...
实体管理是Hibernate中的重要部分,书中会详细介绍如何定义实体类,使用注解来声明属性与数据库字段的映射,以及如何实现对象的生命周期管理,包括瞬时态、持久态、托管态和游离态。此外,还会讲解实体间的一对一、...
Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责控制应用程序的流程,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作。 **Struts2框架** Struts2是一个强大的MVC框架,它继承了...
**文件结构**:尽管没有详细列出所有子文件,但通常一个Hibernate项目会包含实体类(Entity)、持久化配置文件(hbm.xml或使用注解)、数据访问对象(DAO)、服务层(Service)和控制层(Controller)等组成部分。...
如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...
在Java的持久化框架Hibernate中,动态...这种方法虽然能处理字段更新的问题,但也有一定的风险,比如反射操作可能导致的安全性问题和性能开销。因此,在实际开发中,应根据具体业务需求和性能要求来选择合适的方法。
以上只是Hibernate众多知识点的一部分,实际面试中可能涉及更多细节,如级联操作、事务隔离级别、延迟加载机制、乐观锁和悲观锁的区别等。熟悉并理解这些内容对于通过Hibernate相关的面试至关重要。
本教程将分为五个部分,逐步深入Hibernate的世界。 **第一部分:Hibernate入门** 这部分主要介绍了Hibernate的基本概念和安装配置。Hibernate基于Java Persistence API(JPA),它提供了对象关系映射(ORM)功能,...
接下来,我们需要创建一个商品实体类(例如:Product),该类的属性对应数据库中的字段,使用Hibernate的注解进行映射。这样,我们可以直接通过对象操作数据库。 然后,建立Service层接口和实现,例如:...
Hibernate校验作为Hibernate框架的一部分,极大地增强了Java对象的数据验证能力。通过使用JSR-303标准,开发者可以方便地在实体类中定义验证规则,确保数据的准确无误。无论是通过注解还是编程式验证,都能有效地...