Hibernate データロード - プライマリキーでデータ検索
2008/09/01 22:13Update
サンプルからHibernateのデータロード(プライマリキーでデータ検索)の方法について 解説します。
主キーは 一つのフィールド の場合
UserMstDao.java/*
* AppSuperDao: 親DAOクラス(定義の解説略)
* UserMstDao:テーブル USER_MSTを操作するクラス
*/
public class UserMstDao extends AppSuperDao {
/**
* セッションを取得する(共通化すべきであるメソッド)
* @return Session
*/
private Session getSession() {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session s = sessionFactory.openSession();
return s;
}
/**
* UserMstデータロード(プライマリキーで検索)
* @param id 主キー。Serializable の型(String、Integer、Double、...)
* @return 合致するUserMstデータ。
*/
public UserMst get(String id) {
return (UserMst)getSession().get(UserMst.class, id);
}
}
UserMstDaoTest.java//テスト用クラス
public class UserMstDaoTest {
public static void main(String []args) {
UserMstDao userMstDao = new UserMstDao();
//ID = 001のUserMstを取得する(データロード)
UserMst userMst = userMstDao.get("001");
System.out.println(userMst.getName());
}
}
主キーは 複数のフィールド の場合
UserMstDao.javaimport org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/*
* AppSuperDao: 親DAOクラス(定義の解説略)
* UserMstDao:テーブル USER_MSTを操作するクラス
*/
public class UserMstDao extends AppSuperDao {
/**
* セッションを取得する(共通化すべきであるメソッド)
* @return Session
*/
private Session getSession() {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session s = sessionFactory.openSession();
return s;
}
/**
* UserMstデータロード(プライマリキーで検索)
* @param id 主キー。UserMstKeyは主キーの型(Integer、Stringなど)。
* @return 合致するUserMstデータ。
*/
public UserMst get(UserMstKey id) {
return (UserMst)getSession().get(UserMst.class, id);
}
}
Session#getメソッドには次のような形があります。
◇ Session#get(Class entity, Serializable id)
◇ Session#get(String entityName, Serializable id)
◇ Session#get(Class entity, Serializable id, LockMode lockMode)
◇ Session#get(String entityName, Serializable id, LockMode lockMode)
指定主キーで永続オブジェクトを取得するには、Session#get()メソッドのほか、Session#load()というメソッドがあります。
その違いは、Session#get()メソッドは最初の呼び出しでDBに問い合わせを行うのに、Session#load()は遅延ロードとなります。即ち、Session#load()で返されたオブジェクトはただのProxyであり、そのオブジェクトに主キーの取得以外のメソッドが呼ばされない限り、DBに問い合わせを行いません。
参考資料
Hibernate究明 - サンプルから学ぶHibernate Proxy
Hibernate究明 - Hibernate のLAZYロード
Sponsored Link
- Relative Articles
- Hibernate設定ファイルその1 - hibernate.cfg.xml - (2008/07/09 14:08)
- Hibernate c3p0 - よく利用されているコネクションプーリング - (2008/07/09 15:00)
- Hibernate 方言(Dialect)一覧 - (2008/07/09 15:10)
- Hibernate のSessionとSessionFactory - (2008/07/09 15:51)
- ThreadLocal でHibernate Session を効率的に管理する - (2008/07/09 18:43)
- Hibernateで複数のDBに接続するには? - (2008/07/09 18:47)
- Hibernateとは - (2008/07/11 14:23)
- Hibernate のインストール - (2008/07/24 11:01)
- Hibernate の開発手順 - (2008/07/24 12:44)
- Hibernate SQLをログに出力方法 - (2008/07/30 16:06)