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
のリストに基づいて選択した行を取得する方法は何ですか?
_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 () ...
(空の句に注意してください)。
ほとんどの人がここで抱えている問題は、彼らがまだ使いたいということです、
_query.setParameter("accountIds", accountFilter);
_
の代わりに
_query.setParameterList("accountIds", accountFilter);
_
リストを扱うときはsetParameterList()
を使用します