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 などを使用することで実現できる。) |