hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别,比如瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象。
以上是转载内容:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html
下面说说自己的理解:
public static void main(String[] args) {
Student s = new Student();
s.setId(2);
s.setName("dqf");
s.setAge(22);
Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
// Session session_1 = sf.getCurrentSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
}
1.首先在内存中有创建一个Student实例,id为2;这个时候student和数据库 一毛钱的关系都没有,称之为transient状态。
2.执行完save方法之后,需要把student作为一个实体存储在数据库中,要把内存中的一个对象存储在数据库中,好像中间还需要个什么东西,我们的理解应该是session吧,此时session中有一个指针指向Student的这个实例。这个时候 Student的实例与数据库是有联系的,这个状态就是persistent状态。
3.执行完close之后,session被关闭,也就是说,内存中Student的实例与数据库中student的这条记录的关系中断了,这个状态就是detached状态。