Hiberante持久化對象的3種狀態
阿新 • • 發佈:2018-01-03
關閉 align bject span hibernate ansi 都是 transient 理解 近日一同事問我關於Hibernate中對象的3種狀態的問題,因此特意總結一下。在Hibernate中對象是有以下3中狀態:
上面說的這個OID其實是指主鍵屬性,可以簡單的理解為id(一般我們的主鍵都是id)。下面通過代碼來介紹下這3中狀態:
關於這3種狀態之間的轉換,我們可以直接看下面這圖就明白了
- 瞬時態(transient object): 沒有OID值,沒有被session對象管理
- 持久態(persistent object):有OID值,被session對象管理了
- 脫管態(detached object):有OID值,沒有被session管理
上面說的這個OID其實是指主鍵屬性,可以簡單的理解為id(一般我們的主鍵都是id)。下面通過代碼來介紹下這3中狀態:
public class Demo2 {
@Test
public void test1(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
//s:沒有IOD,沒有被session管理
//1,這個s對象就是瞬時態對象
Student s =new Student();
s.setName("美美");
//save()方法返回OID的值
Serializable id = session.save(s);
//當前s被session的save執行後
//s: 有OID,已經被session管理了
//2,這個s對象就是持久態對象
System
.out.println(id);System.out.println(s.getId());
//持久態對象有id的session.getTransaction().commit();
session.close();//session關閉了
//s: 有OID,沒有被session對象
//3.這個s對象就是脫管態對象
System.out.println(s.getId());
}
}
關於這3種狀態之間的轉換,我們可以直接看下面這圖就明白了
Hiberante持久化對象的3種狀態