前面寫了幾篇關于SSH的博客,但不是Struts就是Spring,Hibernate還從來沒寫過呢。說好是SSH的,怎么可以光寫那兩個,而不寫Hibernate呢對吧。今天就先說說Hibernate對象的三種狀態(tài),Hibernate對象有三種狀態(tài),分別是:臨時態(tài)(Transient)、 持久態(tài)(Persistent)、游離態(tài)(Detached)。
臨時狀態(tài):是指從對象通過new語句創(chuàng)建到被持久化之前的狀態(tài),此時對象不在Session的緩存中。
處在此狀態(tài)的對象具備以下特點:
通常在下列情況下對象會進入臨時狀態(tài):
例如:Object object = new Object();此時object為臨時狀態(tài),數據庫中沒有對應的數據,Session緩存中也沒有相關聯的實例。
持久化狀態(tài):是指對象被持久化到Session對象被銷毀之前的狀態(tài),此時對象在Session的緩存中。
處在此狀態(tài)的對象具備以下特點:
通常在下列情況下對象會進入臨時狀態(tài):
例如:Session session = factory.openSession(); object.setName("持久化對象"); session.save(object);此時object對象為持久化對象,Session緩存中有相關聯的實例,數據庫中有相應的記錄。
游離狀態(tài):是指從持久化對象的Session對象被銷毀到該對象消失之前的狀態(tài),此時對象不在Session的緩存中。
處在此狀態(tài)的對象具備以下特點:
通常在下列情況下對象會進入臨時狀態(tài):
例如:session.close();此時上文的object對象為游離對象,Session緩存中沒有有相關聯的實例,數據庫中有相應的記錄。
三種狀態(tài)之間的轉換過程
對上圖的解析:
三種狀態(tài)在程序的轉換過程:
代碼 | 對象的生命周期狀態(tài) | 對象的狀態(tài) |
---|---|---|
Object object = new Object(); | 開始生命周期 | 開始生命周期 |
Session session = factory.openSession(); Transaction tx = session.beginTransaction(); | 在生命周期中 | 臨時狀態(tài) |
session.save(object); | 在生命周期中 | 轉變?yōu)槌志没癄顟B(tài) |
tx.commit(); | 在生命周期中 | 持久化狀態(tài) |
session.close(); | 在生命周期中 | 轉變?yōu)橛坞x狀態(tài) |
System.out.println(object.getName()); | 在生命周期中 | 游離狀態(tài) |
object = null; | 結束生命周期 | 結束生命周期 |
三種狀態(tài)里面,只有持久化狀態(tài)在Session緩存中有相關聯的實例,臨時狀態(tài)跟游離狀態(tài)都沒有。臨時狀態(tài)數據庫里沒有對應的記錄,其他兩種可能又記錄,也可能沒有記錄。好了,Hibernate對象的三種狀態(tài)就說到這里,接下來可能跟大家說說Hibernate的Session,期待不?
更多建議: