[play1-jpa]複数データベースの使用

  playframework1

Play framework 1.3.0の新機能として、複数データベースの同時使用がサポートされました。
MySQLなどのデータベースに加えて、ユーザ設定保存するためにH2DBのファイルDBを利用したり、一時的に集計をとるためにインメモリDBを利用したり、と言った用途が思いつきます。CSVファイルを読み書きするためにH2DBを起動するというのもありかもしれないです。
いくつかの稼働中のシステムのデータベースを保守・監視するようなアプリケーション用途とかにも使えそうですね。

使い方

application.conf

db(.識別名) や jpa(.識別名)、 hibernate(.識別名) としてデータベースごとの設定を行います。
サンプルアプリケーションでは下記のような例が示されていました。

db.default.url=jdbc:h2:mem:student
db.default.driver=org.h2.Driver
db.default.user=sa
db.default.pass=

db.teacher.url=jdbc:h2:mem:teacher
db.teacher.driver=org.h2.Driver
db.teacher.user=sa
db.teacher.pass=

jpa.default.debugSQL=true
jpa.teacher.debugSQL=true

上記は、2つのインメモリDBを扱う設定例です。
データベースとして H2を使用したときは、db=memdb=fs といった簡易表記が許されいますが、区別する必要があるので明示しての設定となっています。

models

Modelクラスに @PersistenceUnit アノテーションを付与して、識別名とエンティティを紐付けます。

@Entity
@PersistenceUnit(name = "default")
public class Student extends Model {
@Entity
@PersistenceUnit(name = "teacher")
public class Teacher extends Model {

データベース操作

データベースを操作する方法は今までどおりで、難しく考える必要はなさそうです。

異なるデータベース上のテーブルを結合しようとしたとき、どうなるんでしょうね。

EntityManagerの参照

少し細やかにjpaを制御したいとき、EntityManagerの参照が必要になることがある。
その場合は次のようにデータベース識別名を指定して取得する。

EntityManager em = JPA.em("student");

LEAVE A COMMENT