Documentation

You are viewing the documentation for the 2.1.5 release in the 2.1.x series of releases. The latest stable release series is 2.4.x.

§JPA の統合

§JNDI を経由してデータソースを公開する

JPA を使用するには JNDI 経由でデータソースをアクセス可能にする必要があります。Play で管理しているデータソースは conf/application.conf に以下の設定を追加する事で JNDI に公開することができます。

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
db.default.jndiName=DefaultDS

§JPA の実装をプロジェクトに追加する

Play 2.0 には JPA の実装は同梱されていません。ユーザは任意の実装を選択することができます。例えば、Hibernate を使う場合はプロジェクトに依存関係を追加します。

val appDependencies = Seq(
  "org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final"
)

§永続性ユニットを作成する

次に、適切な persistence.xml JPA 設定ファイルを作成する必要があります。設定ファイルを conf/META-INF ディレクトリに配置すると、クラスパスに適切に追加されます。

以下は Hibernate を使うための設定ファイルの見本です。

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
             
    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>DefaultDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        </properties>
    </persistence-unit>
    
</persistence>

§JPA のアクションに @Transactional アノテーションを付ける

各 JPA 呼び出しはトランザクションの中で行われる必要があるため、JPA を特定のアクションで有効にするには、 @play.db.jpa.Transactional アノテーションを付けます。これにより、トランザクション管理をする JPA Action がアクションメソッドに組み合わされます。

@Transactional
public static Result index() {
  ...
}

アクションがクエリーしか実行しない場合は、 readOnly 属性を true にすることができます。

@Transactional(readOnly=true)
public static Result index() {
  ...
}

§play.db.jpa.JPA ヘルパーを使う

play.db.jpa.JPA ヘルパークラスを使う事で、好きなタイミングで現在のエンティティ・マネージャを取得することができます。

public static Company findById(Long id) {
  return JPA.em().find(Company.class, id);
}

次ページ: キャッシュを使う