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中对象的三种状态就先总结到这里,大家一起进步~


你可能感兴趣的:(Hibernate对象的三种状态)