jpaを経由しないで直接DBへ接続する方法も書いておく。
jpaは基本、すべてメモリ上に展開する思想なので、大量のデータを抽出しながら出力するような用途には向かない。
そのような時は、ResultSet
を回しながら出力するような昔ながらの書き方が必要になると思う。
コネクション取得
Connection conn = DB.getConnection();
簡易なSQL実行
ResultSet rs = DB.executeQuery(SQL);
play.db.helper
に、jdbcを使用したDBアクセスのためのヘルパがある。
こちらの使い方はこれから調べたい。
jpaの管理外でDBを直接操作して変更してしまうと、jpaの管理しているキャッシュと齟齬が発生してしまう。使いどころ、扱いには注意が必要だ。
ちなみにjpaのキャッシュはL1とL2があり(下表)、play1ではL2キャッシュを使用しないキャッシュ分離レベル(独立)を採用している。なので、DB直接操作でのデータ更新はトランザクション内でのjpa操作との干渉にさえ注意すればよさげ。
種類 | タイプ | 担当 | 説明 |
---|---|---|---|
L1キャッシュ | 独立型 永続性コンテキスト・キャッシュ | EntityManager | トランザクション内で使用しているオブジェクトを保持する。 |
L2キャッシュ | 共有型 永続性ユニット・キャッシュ | EntityManagerFactory | データソースとやり取り(取得や更新)したオブジェクトを保持する。 |