Hibernate对象的三种状态

hibernate中对象的状态有三种:临时态(Transient)、持久态(Persistent)和游离态(Detached),三种状态转化的方法都是通过session来调用的,处于三种状态下的对象所具有的特点,总结如下:

临时态:没有被session管理

在数据库中没有与之匹配的记录;

持久态:纳入session管理

在数据库中有与之匹配的记录

当属性发生变化,在清理缓存时(脏数据检查)会自动和数据库同步;

游离态:没有被session管理

在数据库中存在与之匹配的记录.

临时态到持久态的方法有save()、saveOrUpdate()、get()、load();

持久态到临时态的方法有delete();

游离态到持久态的方法有update()、saveOrUpdate()、lock();

持久态到游离态的方法有:session.close()、session.evict()、session.clear()。

临时态

当new一个实体对象后,这个对象处于临时态,即这个对象只是一个保存临时数据的内存区域,这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或更新到数据库,这个对象才转换为持久对象。

如果这个被new出来的对象并没有被变量引用,那么它会被java虚拟机回收。

//创建对象
Cat cat=new Cat();
cat.setName("miaomiao");
…
CatDaocd=new CatDao();
//持久化,cat对象从临时态转换为持久态
cd.save(cat);

持久态:

持久化对象的实例在数据库中有对应的记录,并拥有一个持久化标识(ID)。对持久化对象进行delete操作后,数据库中对应的记录会被删除,持久化对象与数据库记录不再存在对应关系,持久化对象变成临时态。

持久化对象被修改后,不会马上同步到数据库,一直到数据库事务提交。

//创建对象
Cat cat=new Cat();
CatDaocd=new CatDao();
//使对象与数据库记录对应,对象是持久态
cat=cd.findById(1001);
//修改了持久化对象,但没有同步到数据库
cat.setName("maomi");
cd.save(cat);
//持久化对象同步到数据库
Transaction.commit();
CatDaocd=new CatDao();
//持久态变为临时态
cd.deleteByName("maomi");

游离态

当与持久化对象关联的Session在Close、Clear或者evict后,持久化对象虽然拥有持久化标识和与数据库对应记录一致的值,但对象已不在持久化层管理之内而处于游离态。游离态的对象与临时态对象相似,只是它还含有持久化标识(ID)。当游离态对象被重新关联到session上时,会通过update(),saveOrUpdate()方法再次转换成持久化对象.

而且,如果这个处于游离态的对象也没有被变量引用,那么它也会被java虚拟机回收。

关于Hibernate中对象的三种状态就先总结到这里,大家一起进步~

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 07:36:20

Hibernate对象的三种状态的相关文章

hibernate对象的三种状态及转换

hibernate对象的三种状态转换关系图 三种状态 瞬时状态(transient): 通过new创建对象后,对象并没有立刻持久化,  它并未参与数据库中的数据有任何的关联,此时java对象的状态为瞬时状态.session对瞬时状态的对象一无所知,当对象不再被引用时,她的数据也就丢失了, 对象将会被java虚拟机按照垃圾回收机制处理. 持久状态(persistent): 当对象与session关联,被session管理时,它就处于持久化状态.处于持久状态的对象拥有数据库的标志.对象什么时候与se

Hibernate 对象的三种状态

对象在第一种状态 Teacher t = new Teacher(); t.setName(“张三”); t.setAge(35); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); 对象在第二种状态 session.save(t); session.getTransaction().commit(); 对象在第三种状态,在commit之后. 1.transient: 内存中新new

Hibernate对象的三种状态是什么?

瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态 由new命令开辟内存空间的java对象, eg. Person person = new Person(”amigo”, “女”); 如果没有变量对该对象进行引用,它将被java虚拟机回收. 瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在H

分享知识-快乐自己:Hibernate对象的三种状态

图解: 1):瞬时状态(Transient) 对象与session没有关联,数据库中没有对应的数据. 一般new出来的对象便是瞬时对象. 对瞬时对象使用save()方法便使之成为持久对象. 由于数据库中没有对应的数据,所以对瞬时对象使用update()方法无效. 2):持久状态(Persistent) 对象与session有关联,且数据库中有对应id的数据. 使用get().load()等方法获得的是持久对象. 对瞬时对象使用save()方法便使之成为持久对象. 对游离对象使用update()方

hibernate对象的三种状态的简单理解

1.  transient:对象首先被new出来的时候:这是它存在内存中,缓存中没有,没有ID,数据库中也没有 2.  persistent:对象再执行save()方法后, Session用一个Map<id,对象引用>保存在缓存中,并保存在数据库中,所以ID有,内存(缓存)有,数据库有. 3.  datached:在Session执行close()方法后,缓存中的Map被清除,所以对象与数据库失去联系,它有ID,在内存有,缓存中没有,数据库中有.

Hibernate(六)__对象的三种状态

瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象. 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交: 持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到). (当对象save后,会将数据持久化,这时obj.set()后再提交事务hibernate会检测到数据的修改. 而如果在save这个对象之前(即

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

Hibernate持久化对象的三种状态

在Hibernate中,持久化对象在被操作的过程中可以分为三个时期,这三个时期是和Session的周期相关的,因为Hibernate中的操作都是基于Session完成的.Session的特定方法能使对象从一个状态转换到另一个状态. 持久化对象的生命周期有三种,瞬时状态.持久状态和分离状态.如下图: 瞬时态 不曾进行持久化,未与任何Session相关联.此状态的对象是用new关键字创建出来的,此时对象没有和数据库中记录对应. //Transient状态 Useruser = new User();

Hibernate复习(五)对象的三种状态和缓存机制

#include <iostream> #include <cmath> using namespace std; class Point { public: Point(double x=0,double y=0); void setPoint(double,double); double getx() { return x; } double gety() { return y; } void display(); protected: double x,y; }; class