ホームページ >データベース >mysql チュートリアル >動的に拡張される配列またはコレクションで JPQL の IN 句を効率的に使用するにはどうすればよいですか?

動的に拡張される配列またはコレクションで JPQL の IN 句を効率的に使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-29 14:40:13185ブラウズ

How Can I Efficiently Use JPQL's IN Clause with Dynamically Expanding Arrays or Collections?

JPQL IN 句: 配列またはコレクションを使用した動的拡張

データベースをクエリする場合、多くの場合、特定のセットに一致するオブジェクトを取得する必要があります。価値観の。 SQL では、これは通常 IN 句を使用して実現されます。ただし、JPQL の標準的なアプローチでは、IN 句内の各値を明示的に指定する必要があります。

JPQL の IN 句の制限

デフォルトの JPQL IN 句は、個々の値のリストを期待します。パラメーター (例:

SELECT item FROM Item item WHERE item.name IN (:name1, :name2, :name3)

) このアプローチは退屈でエラーが発生しやすくなる可能性があります

解決策: コレクションの活用

この制限に対処するために、JPQL 2.0 では、コレクションをパラメーターとしてオブジェクトに渡す機能が導入されています。 IN句。これにより、句内の値のセットを動的に拡張できます。

JPQL IN 句での配列とリストの使用

Java では、配列または値のコレクションを表すリスト:

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

String jpql = "SELECT item FROM Item item WHERE item.name IN :names";
Query q = em.createQuery(jpql);
q.setParameter("names", names);

コレクションを「names」という名前のパラメーターとして渡すことにより、 JPQL は、値を自動的に IN 句に解凍します。

互換性検討虑

この機能は JPA 2.0 でサポートされており、さまざまな ORM プロバイダーでの特定の実装が必要であることに注意してください。

  • EclipseLink は、JPQL での配列またはコレクションの使用を完全にサポートしていますIN 句。
  • Hibernate 3.5.1 では、パラメータを括弧で囲む必要があります:
String jpql = "SELECT item FROM Item item WHERE item.name IN (:names)";

以上が動的に拡張される配列またはコレクションで JPQL の IN 句を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。