------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态
commit和flush三种状态间的使用,commit和flush的区别:
saveOrUpdate和merge三种状态间的使用,saveOrUpdate和merge的区别
前方标注一下,用的是mysql数据库,主键生成策略是increment
一,Hibernate-ORM的对象的三种状态:
* Hibernate对象的三种状态
* 1.临时状态(瞬时态)(临时态,自由态)
*
我们通过new关键字创建出一个类的实例对象, 这个对象和hibernate没有任何关系!
* 2.持久状态
*
对象被session管理。就会产生有一个OID(主键标识符)!这个对象和hibernate有关系
* 3.游离状态(托管态)
*
曾经被session管理过!有OID
*和瞬时态的区别在于,是否存在OID!
大话一下:临时状态就是没有关系,就像你和大街上任意一个女孩没有关系,持久状态就是你和她有了联系(男女朋友,结婚),游离状态就是已经分手了(但是有过曾经)
二,一张图揭秘如何进入各个状态的方法:
三,各个状态的小案例:
@Test /*简单写一下三种状态,和根据这个increment主键生成策咯生成记录 * * ---------------------------------- Hibernate: select max(tid) from Teacher ---------------------------------- Hibernate: insert into Teacher (name, tid) values (?, ?) * */ public void t01ThreeStatus01(){ System.out.println("----------------------------------"); Teacher teacher=new Teacher("孟六爱自由");//临时状态(瞬时状态) session.save(teacher);//持久状态 System.out.println("----------------------------------"); tr.commit(); session.evict(teacher);//游离状态 }