9

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

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

@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 列目 [prodImageId=:id0_、:id1_、:id2_、:id3_、:id4_、:id5_ の model.ProductImage から prodImageId、prodImage を選択]

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

4

2 に答える 2

23
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);

accountFilterオブジェクトであると仮定しListます。空のリストを渡すべきではないことに注意してください。これは、次の SQL (これは機能しません) になるためです: ... WHERE xyz IN () ...(空の in-clause に注意してください)。

于 2013-01-12T18:15:04.677 に答える
6

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

query.setParameter("accountIds", accountFilter);

それ以外の

query.setParameterList("accountIds", accountFilter);

setParameterList()リストを扱うときに使う

于 2015-05-25T11:47:00.127 に答える