结合课上老师讲的以及查资料看书,把相关知识进行了整理。今天开始用笔记把一些知识点和敲的代码段记下来了,果然还是记一下效果好。推荐有道或是为知等笔记软件,很好用。
如有不足之处,请多多指教。欢迎转载:@CSU-Max
Hibernate的三种状态:
1、瞬时状态
2、持久化状态
3、游离状态
各种状态之间的转换关系:
下面来详细介绍一下各种状态:
瞬时状态:
实例对象通过new关键字开辟内存空间创建Java对象,但是它并没有纳入Hibernate Session的管理。它只是一个携带信息的载体,如果没有变量对它引用,则其将会被JVM回收。
1、处于瞬时状态的对象不在Session的缓存中,不与任何的Session对象相关联。
2、处于瞬时状态的对象在数据库中没有与之相对应的记录。
3、当一个瞬时状态对象被持久化对象引用,它将会自动变为持久化状态对象。
持久化状态:
持久化状态对象存在与数据库中的数据对应,并于Session和Transaction关联,并且相关联的Session没有关闭,Trasaction没有提交。持久化状态对象发生改变时,在Trasaction提交时会影响到数据库。
1、每个持久态对象都于一个Session对象关联
游离状态:
当持久化对象的Session关闭后,这个对象就从持久化对象变为游离态对象。游离态对象仍然存在与数据库数据的关联,只是不在Hibernate的Session管理范围之内。如果将某个处于游离态的对象重新关联某个新的Session,则其将变回持久化对象,如果没有变量对它引用,则其将会被JVM回收。
1、处于游离状态的对象都是由持久化状态对象转化而来。
2、处于游离状态的对象不与任何Session对象关联。
3、处于游离状态的对象在数据库中存在与之相对应的记录(前提是没有其他Session实例删除该条记录)。
简单的代码说明:
public void test(){
User user = new User( "admin" , "admin" ) ; //new创建一个瞬时状态对象
Session session = HibernateUtil. currentSession ();
Transaction ts = null ;
try {
ts = session.beginTransaction();
session.save(user); //调用save操作,变为持久化对象
ts.commit();
} catch (Exception e){
ts.rollback();
System. out .println( "---error---" );
e.printStackTrace();
} finally {
HibernateUtil. closeSession (); //关闭Session之后,变为游离态对象
}
}