ホームページ > データベース > mysql チュートリアル > JPQL の IN 句はコレクションを直接処理できますか?

JPQL の IN 句はコレクションを直接処理できますか?

Susan Sarandon
リリース: 2024-12-28 19:06:11
オリジナル
940 人が閲覧しました

Can JPQL's IN Clause Handle Collections Directly?

JPQL IN 句: 配列、リスト、その他のコレクションの展開

Java Persistence Query Language (JPQL) では、IN 句を使用して次のことができます。比較する特定の値のリストを指定します。ただし、値を個別にリストするのではなく、値のコレクションを比較する必要がある場合、JPQL でそれを行う方法はないかと疑問に思うかもしれません。

答え:

はい、JPA 2.0 以降では、IN 句でコレクションを個別の値に展開するように指定できます。これを行うには:

  1. JPQL クエリを定義します: IN 句と名前付きパラメータを使用して JPQL クエリを作成します。例:
String qlString = "select item from Item item where item.name IN :names";
ログイン後にコピー
  1. コレクションの作成: Java コレクションの作成チェックする値を含む (リストまたはセットなど)。
  2. パラメータを設定します: Query オブジェクトの setParameter() メソッドを使用して、値としてコレクションを渡します。名前付きのパラメータ:
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);
ログイン後にコピー

例:

EclipseLink の次の例では、名前が「foo」または「bar」のいずれかに一致するすべての Item オブジェクトを取得します。

String qlString = "select item from Item item where item.name IN :names";
Query q = em.createQuery(qlString, Item.class);

List names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());
ログイン後にコピー

に関する注意事項Hibernate:

Hibernate 4 より前では、JPQL クエリでパラメータを括弧で囲む必要がありました:

String qlString = "select item from Item item where item.name IN (:names)";
ログイン後にコピー

ただし、これは Hibernate 固有の拡張機能であり、標準 JPQL 構文の一部。

以上がJPQL の IN 句はコレクションを直接処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート