Session接口負責執行被持久化對象的CRUD操作,在hibernate 中使用最爲廣泛,是持久化操作的核心。session的生命週期存在於transaction中,Hibernate中數據庫連接最終包裝成Session對象, 使用Session對象可以對數據庫進行操作。
Session的創建
Configuration config = new Configuration().configure();
SessionFactory sessions = config.buildSessionFactory();
對象在生命週期中有三種狀態,transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態),臨時狀態(Transient):用new創建的對象,它沒有持久化,沒有處於Session中,處於此狀態的對象叫臨時對象;持久化狀態(Persistent):已經持久化,加入到了Session緩存中。如通過hibernate語句保存的對象。處於此狀態的對象叫持久對象;遊離狀態(Detached):持久化對象脫離了Session的對象。如Session緩存被清空的對象。特點:已經持久化,但不在Session緩存中。處於此狀態的對象叫遊離對象。
瞬時態(Transient)
由new操作符創建,尚未與Hibernate Session關聯的對象被認定爲瞬時(Transient)的。瞬時(Transient)對象沒有被存入任何數據表中,也不會被持久化到數據庫中,一旦不被其他對象引用,他們的狀態立即消失。
瞬時態對象創建
User user - new User();
user.SetName("Tom");
user.SetSex("Man");
瞬時狀態的特點有:
1、 與數據庫中的記錄沒有任何關聯,也就是沒有與其相關聯的數據庫記錄。
2、 與Session沒有任何關係,也就是沒有通過Session對象的實例對其進行任何持久化的操作。
持久態(Persistent)
持久化狀態(Persistent):與session關聯並且在數據庫中有相應數據。已經持久化,加入到了Session緩存中。如通過hibernate語句保存的對象。處於此狀態的對象叫持久對象。
瞬時態轉化持久態
User user - new User();
user.SetName("Tom");
user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user); //user處於持久化狀態
transaction.commit();
session.close();
持久對象特點:
1. 和session實例關聯;
2. 在數據庫中有與之關聯的記錄。
Hibernate三種狀態之三:遊離狀態(Detached):持久化對象脫離了Session的對象。如Session緩存被清空的對象。特點:已經持久化,但不在Session緩存中。處於此狀態的對象叫遊離對象,即當持久態歐對象不再與session關聯時,則變爲遊離狀態。
User user - new User();
user.SetName("Tom");
user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user);
transaction.commit();
session.close(); //關閉session後,user處於遊離狀態
遊離態對象特點:
遊離態對象不再與session實例關聯。
遊離態對象屬性值的改變不會同步到數據庫。
三態之間的轉換方法:
對象通過構造方法成爲自由態;持久態和遊離態則通過session的delete方法成爲自由態.
對象可以由session的load或get方法直接成爲持久態;自由態對象可以通過save,saveOrUpdate或persist方法成爲持久態;遊離態對象則可以通過update,saveOrUpdate成爲持久態.
遊離態只能由持久態轉換而來,通過close或clear方法實現。