Dashboard > OpenSource Project > ... > Hibernate 3入門 > Session
OpenSource Project Log In   View a printable version of the current page.
Session
Added by zach14c, last edited by zach14c on Aug 13, 2005
Labels: 
(None)

Hibernate在對資料庫進行操作之前,必須先取得Session實例,相當於JDBC在對資料庫操作之前,必須先取得Connection實例, Session是Hibernate操作的基礎,它不是設計為執行緒安全(Thread-safe),一個Session由一個執行緒來使用。
Session實例由SessionFactory開啟獲得,例如:

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
....
session.close();

透過Session,可以對資料庫進行新增、刪除、更新,例如使用save()新增一筆資料:

User user = new User(); 
user.setName("momor"); 
user.setAge(new Integer(26)); 
session.save(user);

使用get()或load()方法取得id為1的資料:

User user = (User) session.get(User.class, new Integer(1));

如果未能發現相符合的資料,則get()方法會返回null,而load()方法會丟出ObjectNotFoundException,在進階的應用中,load()方法可以返回代理物件,並可充分利用緩衝機制。

在Hibernate 3中,取消了find()方法,您必須透過Query或Criteria來進行資料查詢。

接下來看看使用Session更新與刪除資料,可使用delete()刪除資料:

User user = (User) session.get(User.class, new Integer(1));
session.delete(user);

如果您開啟了一個Session,從資料表中取出資料顯示到使用者介面上,之後關閉Session,當使用者在介面上操作完畢並按下儲存時,這時您要重新開啟一個Session,使用update()方法將物件中的資料更新至對應的資料表中:

User user = (User) session.get(User.class, new Integer(2));
session.close();
....
user.setAge(new Integer(27));
session = sessionFactory.openSession();    
Transaction tx= session.beginTransaction(); 
session.update(user);
tx.commit();
session.close();

Session提供了一個saveOrUpdate()方法,為資料的儲存或更新提供了一個統一的操作介面,藉由定義映射文件時,設定<id>標籤的unsaved-value來決定什麼是新的值必需,什麼是已有的值必須更新:

<id name="id" column="id" type="java.lang.Integer" unsaved-value="null">
    <generator class="native"/> 
</id>

unsaved-value可以設定的值包括:

  • any:總是儲存
  • none:總是更新
  • null:id為null時儲存(預設)
  • valid:id為null或是指定值時儲存

這樣設定之後,您可以使用Session的saveOrUpdate()方法來取代update()方法。

Site powered by a free Open Source Project / Non-profit License (more) of Confluence - the Enterprise wiki.
Learn more or evaluate Confluence for your organisation.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.1.5a Build:#411 Mar 16, 2006) - Bug/feature request - Contact Administrators