Hibernate持久化对象的状态及状态之间的转换

Hibernate持久化对象有如下三种状态:

1 . 瞬态:对象由new操作符创建出来之后,还未与Hibernate Session相关联,对应的数据表中没有该对象对应的数据。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了对瞬态对象的引用,则该对象会被垃圾回收器处理掉。使用Hibernate Session可以将其持久化

2 .持久化:持久化对象在数据表中有对应的记录,并且有持久化标识。持久化的对象可以使刚刚被保存的,也可以是刚刚被加载的。无论哪一种,持久化对象都必须与指定的Hibernate Session关联。Hibernate会检测到持久化对象的改动,在当前操作执行完成时将改动过的数据写回数据库,而不需要在执行update。

3 . 脱管:如果某个对象曾经处于持久化状态,但随着与之关联的Session的关闭,该对象就会变为托管状态。此时数据表中依然存在与之对应的记录。这时对于托管对象的引用依然有效,可以对该托管对象进行修改。如果重新让托管对象与某个Session相关联,这个托管对象又会重新变为持久化状态,而且在托管状态进行的修改不会丢失,也能被写入数据库。
Hibernate持久化对象的状态转换图:
在这里插入图片描述
瞬态的对象转换为持久化状态的方法,Serializable save(Object obj) ;
Serializable save(Object obj , Object id);
void persist(Object obj) ;
void persist(Object obj ,Object id);

根据主键加载持久化实体: Object load(Object.class , Serializable id ) ;
Object get (Object.class , Serializable id )
Object find(Object.class , Serializable id )

猜你喜欢

转载自blog.csdn.net/weixin_42957479/article/details/83215633
今日推荐