实体对象的状态及转化:
有了上面关于Hibernate缓存的知识,我们再来介绍实体对象的状态就非常容易理解了。
A:自由态对象:(临时状态-transient)
当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下:
Customer customer=new Customer(“zx”,27,images);
这时customer对象就处于自由状态,为什么说customer对象处于自由状态呢?这是因为,此时customer只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说customer对象现在还自由的游荡于Hibernate缓存管理之外。所以我们可以看出自由对象最大的特点就是,在数据库中不存在一条与它对应的记录。
B:持久化对象: Persistent(持久态)
持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象现在还处于Hibernate的缓存管理之中。这是对该实体对象的任何修改,都会在清理缓存时同步到数据库中。如下所示:
Customer customer=new Customer(“zx”,27,images);
tx=session.beginTransaction();
session.save(customer);
customer=(Customer)session.load(Customer.class,”1”);
customer.setAge(28);
tx.commit();
这时我们并没有显示调用session.update()方法来保存更新,但是对实体对象的修改还是会同步更新到数据库中,因为此时customer对象通过save方法保存进数据库后,已经是持久化对象了,然后通过load方法再次加载它,它仍然是持久化对象,所以它还处于Hibernate缓存的管理之中,这时当执行tx.commit()方法时,Hibernate会自动清理缓存,并且自动将持久化对象的属性变化同步到到数据库中。
C:游离对象: 游离状态---detached
当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录。如下所示:
Customer customer=new Customer(“zx”,27,images);
tx=session.beginTransaction();
session.save(customer);
customer=(Customer)session.load(Customer.class,”1”);
customer.setAge(28);
tx.commit();
session.close();
当session关闭后,customer对象就不处于Hibernate的缓存管理之中了,但是此时在数据库中还存在一条与customer对象对应的数据记录,所以此时customer对象处于游离态。
D:三种对象状态之间的转化:
这三种对象状态,是可以相互转化的,一个自由对象可以通过session.save()方法或者session.saveorupdate()方法变成持久化对象,一个持久化对象可以通过session.flush()或者session.evict()方法,移出Hibernate缓存从而转化为游离对象,一个游离对象可以通过再次加载或者调用session.update()方法,再次恢复为持久化对象,也可以通过调用session.delete()方法变成自由对象,并且删除数据库中对应的数据记录。
示例程序:
Configuration cfg = new Configuration();
SessionFactory sf=cfg.configure().buildSessionFactory();
Customer customer=new Customer(“zx”,27,images);//customer对象处于自由状态
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
session.save(customer);//保存后customer对象处于持久化状态
session.flush();//清空缓存后customer对象处于游离状态
tx.commit();
session.close();
Session session2=sf.openSession();
Transaction tx2=session2.beginTransaction();
session2.update(customer);//通过调用update()方法将游离状态的customer对象,再次转化成持久化状态
session2.delete(customer);//调用delete()方法后,当清空缓存时,会将customer对象移出缓存,同时会在数据库
中生成delete事务,来删除customer对象对应的数据记录
tx.commit();
session.close();
分享到:
相关推荐
深入到源码层面,我们可以看到Hibernate如何将Java对象转化为SQL语句,以及如何执行这些SQL语句并处理结果。这包括了Hibernate的CriteriaBuilder、QueryExecutor、EntityPersister等关键组件的工作流程。 总结,...
一、Hibernate实体的状态管理 1. **瞬时状态(Transient)**: 当对象通过`new`关键字创建,但尚未与Session关联时,对象处于瞬时状态。这些对象在内存中存在,但不会被持久化到数据库中,也没有持久化标识。对...
在数据库管理系统中,对象持久化是指将程序中的对象状态转化为可以长期存储的形式,以便在后续的运行时能够恢复这些状态。 Hibernate是一种流行的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互,...
9. **实体生命周期**:Hibernate定义了几个关键的实体状态,如瞬时态、持久态、脱管态和临时态,理解这些状态对于理解对象的管理至关重要。 10. **实体的级联操作**:级联操作允许在一个操作中处理关联的对象,例如...
在Java开发中,它作为对象关系映射(ORM)工具,将复杂的SQL操作转化为对Java对象的操作,从而减轻了开发人员的工作负担。本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,...
在Java应用程序中,Hibernate作为一个库,通过引入`hibernate.jar`包,可以实现数据持久化,即将对象状态持久化到关系型数据库中。这个jar包通常包含了Hibernate的核心组件和服务,如实体管理、查询语言、事件监听等...
9. **实体状态**:Hibernate识别四种实体状态:瞬时、持久化、托管和脱管,理解这些状态对于正确地管理和操作对象至关重要。 10. **实体生命周期**:从新建对象到删除对象,Hibernate会经历一系列的生命周期状态...
10. **实体状态**:Hibernate区分了瞬态(Transient)、持久化(Persistent)和游离(Detached)三种对象状态,理解这些状态对于正确使用Hibernate至关重要。 11. **查询优化**:Hibernate提供了查询优化策略,如...
2. **持久化(Persistence)**: Hibernate负责将实体对象持久化到数据库中,通过@Persit、@Merge、@Remove等操作实现对象的生命周期管理。 3. **会话(Session)**: Hibernate的会话接口是与数据库进行交互的主要...
Hibernate 3.3.1 是一个历史悠久且广泛使用的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为面向对象的代码。这个压缩包文件包含了一系列必要的JAR库,使得开发人员能够轻松地在他们的项目中集成...
- 对象状态:Hibernate定义了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态有助于正确处理对象的生命周期。 5. **持久化操作**:通过Hibernate的API,可以方便地进行对象的持久化操作,如保存新...
Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员将数据库操作转化为面向对象的方式,极大地简化了Java数据库编程。以下是文档可能包含的一些关键知识点: 1. **对象关系映射(ORM)**:解释了...
Hibernate管理的实体对象有三种状态: 1. Transient(自由状态):对象未与任何Session关联,与数据库无直接联系。 2. Persistent(持久状态):对象已保存在数据库中,与当前Session关联,其变化会被持久化到数据库...
7. **实体状态管理**:Hibernate将实体分为瞬时态、持久态、游离态和删除态四种状态,理解这些状态对于正确使用Hibernate至关重要。 8. **事务管理**:Hibernate支持编程式事务和声明式事务,确保数据的一致性和...
1. **数据抽象**:实体对象允许将数据模型转化为面向对象的形式,这样即使数据库结构发生变化,对象之间的关系和行为也能保持稳定。 2. **数据库无关性**:将持久化逻辑封装在对象中,使得应用程序不必直接操作SQL...
8. **实体状态管理**:Hibernate识别四种实体状态:瞬时(Transient)、持久化(Persistent)、脱管(Detached)和游离(Detached),这有助于理解对象在生命周期中的行为。 9. **级联操作**:在映射文件或注解中,...
2. 对象状态管理:Hibernate通过EntityState管理实体对象的状态,如瞬时态、持久态、脱管态等,确保数据的一致性。 3. 查询机制:Hibernate提供HQL(Hibernate Query Language)和Criteria API两种查询方式,此外,...
Hibernate定义了四种实体状态:瞬时态、持久态、游离态和删除态。了解这些状态及其转换,有助于理解对象如何被持久化和管理。 7. **事件监听器与拦截器** Hibernate允许开发者注册事件监听器,如`...