playframework1‎ > ‎jpa‎ > ‎

複数データベースの使用

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

使い方

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=mem や db=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");