7.3.3. ユニバーサルDAOとJSR317(JPA2.0)との機能比較

この章では、以下の機能の比較を示す。

重要

ユニバーサルDAOでは、JPAで定義されているアノテーションのうち、 Entityに使用できるJPAアノテーション に記載のあるものだけをサポートしている。 ここに記載のないアノテーションに関連する機能については、使用できない。

機能比較(○:提供あり △:一部提供あり ×:提供なし -:対象外)
機能 ユニバーサルDAO JSR317
リレーションシップに対応できる
× [1]
Entityを元にCRUDが実行できる
SQLを作成することなくCRUDのSQLを実行できる

解説書へ
検索結果をJava Beansオブジェクトとして取得できる
解説書へ
任意のSQL文を実行できる
解説書へ
SQLの動的組み立てができる [2]
解説書へ
バッチ実行ができる
解説書へ
×
大量データを取得する際に遅延ロードができる
(ヒープを圧迫せずに大量データを処理できる)

解説書へ
×
ページング用の範囲指定の検索ができる
解説書へ
サロゲートキーの値を採番できる
解説書へ
Entityの状態をデータベースに反映時に
Bean Validationが実行できる
× [3]
データベースアクセス前後に
任意の処理(コールバック呼び出し)を実行できる
× [4]
排他制御ができる [5]
解説書へ(楽観ロック)
解説書へ(悲観ロック)
[1]リレーションシップがあるテーブルの検索はSQLを作成することで対応できる。登録、更新、削除については、テーブル毎に必要な処理を呼び出すことで対応する。
[2]ユニバーサルDAOでは、条件及びソート項目に限り動的な組み立てができる。詳細は、 SQLの動的組み立て を参照
[3]Nablarchでは、外部からのデータを受け付けたタイミングでバリデーションを実施し、バリデーションエラーがない場合のみEntityへ変換しデータベースへ保存する。
[4]任意の処理が必要となる場合は、ユニバーサルDAOを呼び出す側で処理を行うことで対応する。
[5]ユニバーサルDAOでは、楽観的ロックのみサポートする。悲観的ロックやJSRで定義されている検索時のロックモードの指定などはサポートしない。(悲観的ロックは、 select for update などを使用することで実現できる。)