总结:
*瞬时(transient): 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
*持久(persistent): 数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。
*脱管(detached): 数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到
session.save(user); user.setName("new name"); tx.commit;
结果,两条语句,一条insert,一条update。 说明处于持久状态的对象,他发生变化的时候,hibernate能知道
session.save(user); user.setName("new name"); user.setBirthday(new Date()); tx.commit;
结果,两条语句,一条insert,一条update。 持久对象变化时不会立即更新数据库,而是等到commit时才做
1.Transient---瞬态的
刚new出来的时候,没有id,数据库中没有,内存(session缓存)中也没有
Teacher t=new Teacher(); t.setXXX(); t.setXXX(); t.setXXX();
这个时候,对象t就是Transient状态(没有id)
2.Persistent---持久的
有id,缓存中有.数据有里也有
session.save(t);
此时,t已经存入数据库,拥有id了,在session关闭之前,t会一直是Persistent状态,所以说save()会持久化一个对象,
3.Detached---分离(脱离管理)的
有id,缓存没有,数据库有。
session.getTransaction().commit();
提交事务之后,因为session会自动关闭,所以在内存中的session管理(缓存)已经不存在了,此时,t的是Detached状态.
这三种状态的区别:
1.有没有id
2.缓存里有没有id
3.(硬盘/数据库)里有没有id
update()需要注意的地方
1.更新Transient状态的对象会出错,但是如果更新自己指定id并且数据库存在此id记录的数据不会出错.
2.update()会更新所有的字段,即使你只想更新一个字段….
对于只更新某个字段,可以用下面的方法
a)dynamic-update节点设置
<hibernate-mapping> <class name="com.hibernate.test.entitys.Student" table="student" dynamic-update="true"> <…………> <…………> <…………> </class> </hibernate-mapping>
这样在update()的时候,程序会动态的选择更新的字段
b)使用HQL语句
Query q = session.createQuery("update Teacher t set t.name='XXXX' where t.id=1"); q.executeUpdate();
delete()----只要有id,不管是什么状态的对象,都可以删除.
相关推荐
总结来说,理解和掌握实体对象的三种状态以及`saveOrUpdate`方法是优化Hibernate应用的基础。通过深入学习这些概念,开发者能够更有效地处理数据持久化,提高代码的稳定性和可维护性。在实践中,应根据具体需求选择...
**Hibernate实体对象操纵** 在Java开发中,Hibernate是一款非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库数据。本篇文章将深入探讨Hibernate中的...
首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`new`关键字创建一个实体对象时,它默认处于临时状态。此时,对象未被Hibernate管理,即使对象包含了主键ID,如果...
总的来说,Hibernate实体层设计是一个综合性的任务,它涉及到对象模型、数据库映射、关系处理、性能优化、事务管理等多个方面。理解和熟练掌握这些知识,能够帮助我们构建出高效、稳定的Java企业应用。
本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...
在这个主题“hibernate操纵实体对象”中,我们将探讨如何使用Hibernate来创建、更新、删除和查询数据库中的实体对象。 首先,`HibernateSessionFactory`是Hibernate的核心组件之一,它负责创建`Session`对象。`...
本篇将详细阐述Hibernate中的对象映射关系以及对象的三种状态。 对象映射是Hibernate的核心特性,它通过ORM(Object-Relational Mapping)技术将Java对象与数据库表之间的关系进行映射。Hibernate提供了一种声明式...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
### JPA实体对象状态 #### 一、实体对象的状态分类 在Java Persistence API (JPA) 中,实体对象的状态管理是实现数据持久化的基础之一。根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
Java实体对象的三种状态是指在Hibernate框架中,实体对象在生命周期中所经历的三个阶段,即瞬时态、持久态和游离态。 瞬时态(New or Transient):当创建一个新的实体对象时,它处于瞬时态。这时对象只是一个保存...
在Hibernate中,对象的状态分为瞬时状态、持久状态和脱管状态。瞬时状态的对象存在于内存中,但未与SessionFactory关联;持久状态的对象已经被持久化到数据库,并且可以通过SessionFactory追踪;脱管状态的对象曾经...
在Hibernate ORM框架中,实体对象可以处于三种不同的状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于有效地管理和更新数据库中的数据至关重要。 **瞬时状态...
在Java应用开发中,对象持久化是一个关键环节,它涉及将程序中的对象状态存储到持久化介质(如关系型数据库)中,并在需要时恢复这些状态。Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理...
了解实体类、持久化属性、主键、对象状态等基本术语。 2. **配置与环境搭建**:学习如何配置Hibernate,包括hibernate.cfg.xml文件的编写,以及JDBC连接池的设置。 3. **对象关系映射(ORM)**:研究Hibernate的...
在处理大量数据或复杂的业务逻辑时,正确地使用Hibernate对象状态可以极大地提高效率和性能。例如,当处理大量对象时,可以先将对象设置为游离状态,待所有更改完成后再一次性提交,以减少数据库事务的频繁交互。
- **对象状态**:瞬时态、持久态、托管态和脱管态。 - **CRUD操作**:创建(save/insert)、读取(get/load)、更新(update)和删除(delete)对象。 - **查询语言**:HQL(Hibernate Query Language)和...
其中,Hibernate的对象状态管理是其核心特性之一,理解并掌握对象的三种状态对于有效使用Hibernate至关重要。本文将详细解析Hibernate的三状态以及它们在实际开发中的应用。 一、Hibernate对象的三种状态 1. **瞬...