動的な値の割り当てのために Java コンテナで JPQL IN 句を利用する
JPQL IN 句を使用すると、エンティティのプロパティをエンティティのリストと比較できます。指定された値。ただし、これらの値が事前に不明である場合、または頻繁に変更される場合には、問題が生じます。
クエリに関する考慮事項
IN 句内のすべてのパラメータを明示的にリストする従来のアプローチ大規模または動的な値のセットを扱う場合、退屈で非実用的になります。 IN 句の値を自動的に展開するコンテナ (配列、リスト、セット) を指定する方法はありますか?
JPA 2.0 以降のソリューション
JPA 2.0 では、コレクションをパラメータとして IN 句に渡す機能が導入されています。構文は次のとおりです。
Query q = em.createQuery("select item from Item item where item.name IN :names", Item.class); List<String> names = Arrays.asList("foo", "bar"); q.setParameter("names", names);
これにより、コレクションの内容に基づいて IN 句に値を動的に割り当てることができます。
Hibernate 3.5.1 の制限事項
JPA 2.0 ではコレクションを使用して IN 句をパラメータ化できますが、Hibernate では3.5.1 には、パラメータを括弧で囲む必要があるバグがあります:
Query q = em.createQuery("select item from Item item where item.name IN (:names)", Item.class);
この不一致は HHH-5126 としてログに記録されており、Hibernate の以降のバージョンで対処されています。
結論
JPQL INのコレクションパラメータ化機能を活用することで句を使用すると、動的または大規模な値のセットを含むクエリを簡素化できます。これにより、クエリの複雑さが軽減されるだけでなく、可変データ セットを操作する際のコードの柔軟性と効率も向上します。
以上がJPQL の IN 句を含む Java コンテナを動的クエリに使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。