ニコニコフレームワーク/JDO

ニコニコフレームワークは永続化サポートとして、JDOでのデータベースアクセスを簡単に行うための機能を提供します。

準備

永続化サポートとしてJDPを使用するにはframework.propertiesで以下の設定を行います。

persistenceManager=jp.sf.nikonikofw.persistence.jdo.JdoPersistenceManager

エンティティの作成

普通にJDOのエンティティとして作成します。

JdoUtilを使う

JdoUtilを使うとJDOのPersistenceManagerを直接使うよりも簡単にJDOの操作を行うことができます。特にJDOのQueryオブジェクトを使ったJDOQLでの検索は非常にシンプルに記述することができるようになります。

以下に簡単な検索の例を示します。

// 1件取得
Employee emp = JdoUtil.from(Employee.class)
  .filter("empId == ?")
  .getSingleResult(empId);

// IDを指定して取得
Employee emp = JdoUtil.getObjectById(id);

// 複数件取得
List<Employee> empList = JdoUtil.from(Employee.class)
  .ordering("empId asc")
  .getResultList();

エンティティの保存や削除は以下のように行います。

// 保存
JdoUtil.insert(entity);
// 削除
JdoUtil.delete(entity);
// 複数件の削除
List<Employee > empList = ...
JdoUtil.deleteAll(empList);

トランザクションについて

ニコニコフレームワークではControllerServletによって自動的に1リクエスト=1トランザクションとしてトランザクションの制御が行われます。正常に処理が終了した場合はコミットされ、例外がスローされた場合はロールバックされます。

個別にトランザクションの制御を行う場合、以下のようにConfigオブジェクトからJdoPersistenceManager経由でPersistenceManagerオブジェクトを取得し、自前でトランザクションを制御することができます。

JdoPersistenceManager manager = (JdoPersistenceManager) Config.getPersistenceManager();
Transaction tx = manager.getPersistenceManager().currentTransaction();
tx.begin();
try {
  ...
  tx.commit();

} catch(Exception ex){
  tx.rollback();
}

なお、JdoPersistenceManagerはデフォルトではトランザクション制御を行いません。上記のようなトランザクション制御を利用する場合は以下のようなサブクラスを作成し、framework.propertiesのpersistenceManagerに指定します。

public class TransactionalJdoPersistenceManager extends JdoPersistenceManager {
  public TransactionalJdoPersistenceManager(){
    super(true);
  }
}