hibernate中的session用法

來源:互聯網
上載者:User

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(); 


 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.