hibernate中的session用法
Session的主要功能是提供對映射的實體類執行個體的建立,讀取和刪除操作。執行個體可能以下面三種狀態存在:
臨時狀態(transient): 不曾進行持久化,未與任何Session相關聯
持久化狀態(persistent): 僅與一個Session相關聯
脫管狀態(detached): 已經進行過持久化,但當前未與任何Session相關聯
1,通過get()或load()方法得到的執行個體都是持久化狀態的,把臨時執行個體變成持久化執行個體
2,持久化執行個體可以通過調用delete(),close()變成脫管狀態。
3,脫管狀態的執行個體可以通過調用 update()、0saveOrUpdate()、lock()或者replicate()進行持久化。
myeclipse中session中的方法:
Session的load()與get()方法:
hibernate中Session介面提供的get()和load()方法都是用來擷取一個實體物件,在使用方式和查詢效能上有一些區別:
1)當資料庫中不存在與OID對應的記錄時,load()方法拋出org.hibernate.ObjectNotFoundException異常,而get()方法返回為null
(2)load方法採用配置的載入策略(預設為消極式載入),而get()方法則會忽略配置,總是採用立即載入方法。
Session介面提供了4個重載的get方法,分別通過“持久類+主鍵”和“全類名+主鍵”以及“鎖選項”來擷取實體物件。
public Object get(Class clazz, Serializable id);public Object get(Class clazz, Serializable id, LockOptions lockOptions);public Object get(String entityName, Serializable id);public Object get(String entityName, Serializable id, LockOptions lockOptions);
public void testGet() throws Exception { Session session = sessionFactory.openSession(); Student student = (Student) session.get(Student.class, 1); // Student student = (Student) session.get(com.entity.Student, 1); System.out.println(student); session.close(); }
Session的save()方法:
Session的save()方法使一個臨時對象轉變為持久化對象
(1)將臨時對象加入到Session緩衝中,使其進入持久化狀態。
(2)選用對應檔指定的標識符產生器,為持久化對象分配唯一的ID。
(3)計劃執行一個insert語句
注意:session的save()方法是用來持久化臨時對象的。不應將持久化對象或游離對象傳遞給save()方法
若將持久化對象傳遞給save()方法,則該步儲存操作是多餘的。
若將游離對象傳遞給save()方法,則會重建ID,再儲存一次。
Session的update()方法:
Session的update()方法使一個脫管對象轉變為持久化對象。它完成以下操作:
(1)將游離對象加入到Session緩衝中,使其轉變為持久化對象。
(2)計劃執行一個update語句。
Session的saveOrUpdate()方法:
Session的saveOrUpdate()方法同時包含了save()方法與update()方法的功能,如果傳入的參數是臨時對象,就調用save()方法;如果傳入的參數是游離對象,就調用update()方法。
Session的delete()方法:
Session的delete()方法用於從資料庫中刪除一個java對象。delete()方法既可以刪除持久化對象,也可以刪除脫管對象。其處理過程如下:
(1)如果傳入的參數是脫管對象,則先使脫管對象與Session關聯,使它變為持久化對象。如果參數是持久化對象,則忽略該步。
(2)計劃執行一個delete語句。
(3)把對象從Session緩衝中刪除,該對象進入刪除狀態。
System.out.println(擷取Session...); Session session = HibernateSessionFactory.currentSession(); System.out.println(開始Transaction...); Transaction tx = session.beginTransaction(); Test my_hibernate = null; System.out.println(Iterator查詢...); Iterator iterator = session.iterate(from Test order by xm); while(iterator.hasNext()) { my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + + my_hibernate.getXb()); } System.out.println(List查詢...); List list = session.find(from Test order by xm); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + + my_hibernate.getXb()); }
System.out.println(Query查詢...); Query query = session.createQuery(from Test order by xm); list = query.list(); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + + my_hibernate.getXb()); } iterator = query.iterate(); while(iterator.hasNext()) { my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + + my_hibernate.getXb()); } System.out.println(Criteria查詢...); Criteria criteria = session.createCriteria(Test.class); criteria.add(Expression.eq(xb,f)); list = criteria.list(); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + + my_hibernate.getXb()); } System.out.println(更新資料...); my_hibernate = (Test)session.load(Test.class,121); my_hibernate.setXb(f); System.out.println(提交Transaction...); tx.commit(); System.out.println(關閉Session...); HibernateSessionFactory.closeSession();