| Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この章では、次のような、実行時にアクセスできる事前定義済の静的問合せの作成方法について説明します。
詳細は、「JPAエンティティの問合せ方法」を参照してください。
名前付き問合せは、作成してコンテナ管理のエンティティに関連付ける事前定義済の問合せです(「アノテーションの使用方法」を参照)。デプロイ時に、OC4JはEntityManagerに名前付き問合せを格納します。実行時に、EntityManagerを使用して、名前付き問合せを取得、構成および実行します。
詳細は、次を参照してください。
例8-1に、@NamedQueryアノテーションを使用してJava永続性問合せ言語の問合せを定義する方法を示します。この問合せは、実行時にEntityManagerを使用して名前findAllEmployeesByFirstNameで取得できます。
@Entity
@NamedQuery(
name="findAllEmployeesByFirstName",
queryString="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = 'John'"
)
public class Employee implements Serializable {
...
}
例8-2では、@NamedQueryアノテーションを使用して、firstnameという名前のパラメータを受け取る
Java永続性問合せ言語の問合せを定義する方法を示します。例8-3では、EntityManagerを使用してこの問合せを取得し、QueryのメソッドsetParameterを使用してfirstnameパラメータを設定する方法を示します。
名前付き問合せでのEntityManagerの使用方法の詳細は、
「EntityManagerを使用したJPAエンティティの問合せ」を参照してください。
オプションで、問合せヒントで名前付き問合せを構成し、JPA永続性プロバイダのベンダー拡張を使用できます(「JPA問合せでのTopLink問合せヒントの構成」を参照)。
@Entity
@NamedQuery(
name="findAllEmployeesByFirstName",
queryString="SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = :firstname"
)
public class Employee implements Serializable {
...
}
例8-3 名前付き問合せのパラメータの設定
Query queryEmployeesByFirstName = em.createNamedQuery("findAllEmployeesByFirstName");
queryEmployeeByFirstName.setParameter("firstName", "John");
Collection employees = queryEmployessByFirstName.getResultList();
EntityManagerのメソッドcreateQueryまたはcreateNativeQueryを使用して、実行時にQueryオブジェクトを動的に作成できます(「Javaの使用方法」を参照)。QueryのメソッドgetResultList、getSingleResultまたはexecuteUpdateを使用して、問合せを実行できます(「問合せの実行」を参照)。
オプションで、問合せヒントで名前付き問合せを構成し、JPA永続性プロバイダのベンダー拡張を使用できます(「JPA問合せでのTopLink問合せヒントの構成」を参照)。
詳細は、次を参照してください。
例8-4に、パラメータを指定して動的EJB QL問合せを作成する方法および問合せを実行する方法を示します。この例では、問合せは複数の結果を返すため、QueryのメソッドgetResultListを使用します。
Query queryEmployeeByFirstName = entityManager.createQuery(
"SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName = :firstname"
);
queryEmployeeByFirstName.setParameter("firstName", "Joan");
Collection employees = queryEmployeeByFirstName.getResultList();
表8-1に、JPA問合せを構築する場合(例8-5を参照)、または@QueryHintアノテーションを使用してJPA問合せを指定する場合(例8-6を参照)に設定できるTopLink EJB 3.0 JPA永続性プロバイダの問合せヒントをリストします。ヒントを設定する場合、次のようなoracle.toplink.essentials.configの適切な構成クラス内の対応するpublic static finalフィールドを使用して値を設定できます。
PessimisticLock
TopLinkQueryHints
HintValuesimport oracle.toplink.essentials.config.HintValues;
import oracle.toplink.essentials.config.TopLinkQueryHints;
Customer customer = (Customer)entityMgr.createNamedQuery("findCustomerBySSN"). setParameter("SSN", "123-12-1234").setHint(TopLinkQueryHints.BIND_PARAMETERS, HintValues.PERSISTENCE_UNIT_DEFAULT).getSingleResult();
例8-6 @QueryHintを使用したTopLink JPA問合せヒントの指定
import oracle.toplink.essentials.config.HintValues;
import oracle.toplink.essentials.config.TopLinkQueryHints;
@Entity
@NamedQuery(
name="findAllEmployees",
query="SELECT * FROM EMPLOYEE WHERE MGR=1"
hints={
@QueryHint={name=TopLinkQueryHints.BIND_PARAMETERS, value=HintValues.PERSISTENCE_UNIT_DEFAULT}
}
)
public class Employee implements Serializable {
...
}
|
![]() Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|