Daoクラスに_List<Object[]>
_を返すメソッドがあり、名前付きクエリを使用しています
_public List<Object[]> getListByCustomer(Session session, int customerId, List<Integer> strIds) {
Query namedQuery = session.createSQLQuery(QueryConstants.EXPORT);
namedQuery.setParameter("customer", customerId);
namedQuery.setParameter("stringId", strIds);
List<Object[]> objects = namedQuery.list();
return objects;
}
_
次のように、stringIdの_List<Integer> strIds
_を名前付きクエリに渡します。
_public class QueryConstants {
public static final String EXPORT =
"SELECT sv.NAME, sv.TYPE, sv.CLIENT_ADDRESS, sv.NAME_REDUNDANT, sv.DEPARTURE_DATE, s1.CODE,sv.STATE, sv.CODE "
+ "FROM VIEW sv, PROCESS p1, SET s1 "
+ "WHERE sv.R_ID = p1.R_ID and p1.ISSUER_ID = s1.USER_ID and sv.CUSTOMER_ID = :customer and sv.R_ID IN (:stringId)";
}
_
しかし、私は_ORA-00932: inconsistent datatypes: expected NUMBER got BINARY.
_を取得します
また、クエリからsv.R_ID IN (:stringId)
を削除すると正常に機能し、クエリに_List<Integer> strIds
_の代わりにInteger (strIds)
を渡すと正常に機能します。
Oracle10gを使用しています。
私はあなたが使う必要があると思います
IN :stringId
の代わりに
IN (:stringId)
JPAの場合
namedQuery.setParameter("stringId", strIds);
正しいですが、Hibernateの場合は使用する必要があります
namedQuery.setParameterList("stringId", strIds);
これは非常に誤解を招くエラーであり、さまざまな原因が原因である可能性があります。私にとっては、おそらく数値であるというパラメーターを設定していましたが、実行時にnull
を設定していたため、binary
でした。別の機会に、春のBean作成エラーが原因でこのエラーが発生し、パラメーターも正しく設定されていませんでした。
私はこれと同じ例外に遭遇し、その理由を以下に見つけました-
私のエンティティでは、フィールドがカスタムオブジェクトにマップされていました(親子関係-@ ManyToOne)。その後、関係アノテーションは開発者によって削除されましたが、データ型は変更されませんでした。
@ManyToOneアノテーションを削除した後、@ Columnアノテーションは適切なデータ型(整数)で使用されているはずです。