web-dev-qa-db-ja.com

HibernateでsetParameterList()メソッドを使用するにはどうすればよいですか?

SELECT ... FROM table_name WHERE id IN()クエリのように、配列として提供されたidsに基づいて、選択した行をOracleデータベースからフェッチする必要があります。

私がそうしようとしているのは、DAOで org.hibernate.setParameterList(String name, Object[] values) メソッドを次のように使用しようとしています。

@Service
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW)
public final class ProductImageDAO implements ProductImageService {

    @SuppressWarnings("unchecked")
    public List<Object[]> getFileName(String[] list) {
        return sessionFactory
                .getCurrentSession()
                .createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list")
                .setParameterList("list", list).list();
    }
}

指定されたメソッドのタイプString[]のパラメーターは、それぞれのSpringコントローラークラスから提供されます。

これにより、次の例外がスローされます。

org.hibernate.hql.ast.QuerySyntaxException:予期しないトークン:、行1、列78の近く[select prodImageId、prodImage from model.ProductImage where prodImageId =:id0 _ 、: id1 _ 、: id2 _ 、: id3 _ 、: id4 _ 、: id5_]

Hibernateを使用してidsのリストに基づいて選択した行を取得する方法は何ですか?

9
Tiny
_String queryString = "select acc from cgix.trust.domain.PtbnAccount as acc where acc.accountId IN (:accountdIds)";
Query query = session.createQuery (queryString);
query.setParameterList("accountIds", accountFilter);
_

accountFilterListオブジェクトであると仮定します。空のリストを渡さないでください。次のSQLが生成されます(これは機能しません):... WHERE xyz IN () ...(空の句に注意してください)。

21
user1972796

ほとんどの人がここで抱えている問題は、彼らがまだ使いたいということです、

_query.setParameter("accountIds", accountFilter);
_

の代わりに

_query.setParameterList("accountIds", accountFilter);
_

リストを扱うときはsetParameterList()を使用します

4
Luthoz