transient(瞬态) 内存中有一个对象,无id
persistent(持久化)内存中有一个对象,有id,缓存中有,数据库中有detached(分离) 内存中有一个对象,有id,缓存中没,数据库中有
public void test() {
Student s = new Student();
s.setName("lll");
s.setAge(11);
//此时是transient状态
Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(s);//save之后是persistent状态
session.getTransaction().commit();//commit之后是detached状态
}
1.首先我们new了一个s对象,此时是transient状态。
2.内存中有个一session对象,当我们调用session的save方法时,它会在内存中放一个指向s对象的引用,称之为缓存。可以简单理解为save之后session里面就缓存了s对象的id,由这个id指向s对象(session保留了一个map,key是id。value是s对象的引用)。
由于save之后发出insert语句,所以数据库中也有了记录。
3.commit之后数据库中记录已存在,session被close,所以缓存中没有。