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
HintValues
import 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. |
|