- PR -

Hibernateによるテーブルロック

1
投稿者投稿内容
どらねこ
常連さん
会議室デビュー日: 2004/01/05
投稿数: 25
投稿日時: 2006-03-22 12:33
Hibernateを使ってテーブルロックを行いたいのですが、ネイティブSQLクエリを使う以外に方法はあるのでしょうか?session.load()、lock()等のようにHibernateで用意された機能があればそちらを使いたいのですが。

※ネイティブSQLによるテーブルロック
Session session = sessionfactory.openSession();
Connection con = session.connection();
con.prepareStatement("LOCK TABLE hoge_table").executeUpdate();

なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2006-03-23 12:45
Query#setLockMode は、如何でしょうか?
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2006-03-23 14:05
こんにちは
http://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html#transactions-locking
に説明があります。

以下、サンプルコードです。

public User getUserWithUpgradeNowait(String userId) {
User user = (User) getHibernateTemplate().load(User.class, userId, LockMode.UPGRADE_NOWAIT);

if (user == null) {
throw new ObjectRetrievalFailureException(User.class, userId);
}
return user;
}
どらねこ
常連さん
会議室デビュー日: 2004/01/05
投稿数: 25
投稿日時: 2006-03-24 11:03
なっかむさん
さやべえさん
返答ありがとうございました。

>なっかむさん
テーブル全行を取得するQueryを生成してそれに対してsetLockMode()でロックをかけるというイメージでしょうか?ただそれですと全行ロックにはなりますが、テーブルロックにはならないですよね。。。

>さやべえさん
サンプルコードですと行ロックになっていないでしょうか?userId(主キー)を指定しているようですし。
1

スキルアップ/キャリアアップ(JOB@IT)