JPA上で利用可能なDAOフレームワークで、インタフェースを定義する
だけで動的な問い合わせを生成してくれます。
SQLファイルを利用した問い合わせもできます。
http://kuina.seasar.org/ja/
今回はKuina-Daoで行ロック、テーブルロックはどのようにやるかのメモです。
行ロック
■javax.persistence.EntitiyManagerを使用する場合
TestEntitiy entity = testDao.find(pkey); EntityManager em = SingletonS2Container.getComponent(EntityManager.class); em.lock(entity, LockModeType.WRITE); //またはem.lock(entity, LockModeType.READ); em.flush();
■org.seasar.kuina.dao.GenericDaoを継承したDaoを使用する場合
TestEntity entity = testDao.find(1); testDao.writeLock(entity); //またはtestDao.readLock(entity);
LockModeType.READはreadLock、LockModeType.WRITEはwriteLockに対応しています。
LockModeTypeとしてLockModeType.WRITEを指定すると、エンティティの状態変更がない場合でもバージョン列は強制的に更新されます。
バージョン列の更新はflushまたはコミットのタイミング。
テーブルロック
テーブルロックはざっと見たところ、Entityを使用してはできなさそうなので、
SQLファイルを利用した方法しかなさそうです。
■Daoインターフェース
public interface LockTableDao { void deleteLockTable(); }
■SQL(LockTableDao_deleteLockTable.sql)
LOCK TABLE appparam IN EXCLUSIVE MODE;
■実行
lockTableDao.deleteLockTable();
Kuina-Daoはメソッドの名前や引数・戻り値から実行すべき操作を判断するので、
戻り値をvoidにする場合は(insert|update|delete|remove)が先頭に付けないと駄目ですね。
http://kuina.seasar.org/ja/user_guide/dao.html#メソッド
Kuina-Daoはあまり人気ないようですが、使いやすくていいですね。
でも複雑な問い合わせはSQLにならざるをえない。。
S2Dao後継のDomaそろそろさわってみようかな。
AnnotationProcessingTool(apt)を利用したJava6(JDBC4.0)対応のO/Rマッパーとその開発支援ツール。
http://doma.seasar.org/
Seasar2への依存なしってのがいいですね!
0 件のコメント:
コメントを投稿