Documentation

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

§JPA の統合

§プロジェクトに依存性を追加する

まず初めに、JDBC と JPA の api 依存性を提供する javaJpa プラグインをプロジェクトが 必要としていることを play に伝える必要があります。

Play に組み込みの JPA 実装は含まれません; どんな実装でも選ぶことができます。例えば Hibernate を使う場合でも、プロジェクトに依存性を追加するだけです:

val appDependencies = Seq(
  javaJpa,
  "org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final" // replace by your jpa implementation
)

§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

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

次に、適切な 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 プロバイダが使用すべき依存性ユニットを Play に伝えなければなりません。application.confjpa.default プロパティを指定します。

jpa.default=defaultPerstistenceUnit

§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);
}

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