[play1-jpa]直接DBを操作する

  playframework1

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データソースとやり取り(取得や更新)したオブジェクトを保持する。
jpaキャッシュの種類

LEAVE A COMMENT