Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

Play/DB

DBアクセス

Playでは単一のデータベースの存在を前提としており、それに従うのであれば簡単にデータベースの変更を取り扱うことができる。 JPA経由でHibernateを使う方法や、複数のデータベースや、GAE等を利用することはここでは考えない。

エボリューションスクリプト

エボリューションスクリプトは、データベースの変更方法をsqlとして記述しておくことによりplayがその面倒を見てくれるというものである。

http://playdocja.appspot.com/documentation/1.2/evolutions

エボリューションスクリプトのディレクトリは「プロジェクトトップ/db/evolutions」となっているが、このディレクトリはデフォルトインストールでは作成されていないので、自分で作成する必要がある。

エボリューションスクリプトによらない方法

エボリューションスクリプトによる方法は大変便利ではあるが、実用的ではない。 開発過程におけるデータベース構造変更時はこれで十分だが、実運用後に変更する場合には、既にあるデータを別テーブルあるいは別データ形態に変換する必要が出てくる(例えば、複数のテーブルデータだったものをまとめて直列化データにしBLOBに入れるなど)。

この場合には当然SQLの記述では不十分である。どうしても自力でデータベース構造の変更とデータの処理を行う必要が出てくる。

playには「起動時に実行するジョブ」の定義機能があるので、これを使う。

http://playdocja.appspot.com/documentation/1.2/jobs

まず、どのようなパッケージ名、どのようなファイル名、どのようなクラス名でもよいので、次のような記述を行う。

import play.jobs._

@OnApplicationStart
class StartJob extends Job {
    override def doJob {
      println("startup!!!")
      ....
    }
}

あとは、データベース変更に必要な記述をすればよい。

ただし、注意点としては、「開発モード」では、システム起動時だけではなく、任意のタイミングでこれが呼び出されてしまう可能性があること。