JPAクエリに空のリストをパラメータとして渡すとエラーが発生します 質問する

JPAクエリに空のリストをパラメータとして渡すとエラーが発生します 質問する

空のリストを JPA クエリに渡すと、エラーが発生します。

例えば:

List<Municipality> municipalities = myDao.findAll();  // returns empty list
em.createQuery("SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities)")
    .setParameter("municipalities", municipalities)
    .getResultList();

リストが空なので、Hibernate はこれを SQL で「IN ()」として生成し、Hypersonic データベースでエラーが発生します。

このチケットはHibernate の問題追跡しかし、そこには多くのコメントやアクティビティがありません。他の ORM 製品や JPA 仕様でのサポートについてもわかりません。

毎回、null オブジェクトと空のリストを手動でチェックしなければならないのは気に入りません。これに対する一般的なアプローチや拡張機能はありますか? このような状況にはどのように対処しますか?

ベストアンサー1

セクションによると4.6.8 式の中でJPA 1.0仕様より:

式の値のセットを定義するコンマ区切りリストには、少なくとも 1 つの要素が含まれている必要がありますIN

言い換えると、Hibernate がクエリを解析して を渡す機能があるかどうかIN()、特定のデータベースがこの構文をサポートしているかどうか (Jira の問題によると、PosgreSQL はサポートしていません) に関係なく、コードを移植可能にしたい場合は、ここで動的クエリを使用する必要があります (通常、動的クエリには Criteria API を使用することを好みます)。

おすすめ記事