web-dev-qa-db-ja.com

java.sql.SQLException:ORA-00932:一貫性のないデータ型:予期されたNUMBERがBINARYを取得しました

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を使用しています。

5
techGaurdian

私はあなたが使う必要があると思います

 IN :stringId

の代わりに

 IN (:stringId)

JPAの場合

namedQuery.setParameter("stringId", strIds);

正しいですが、Hibernateの場合は使用する必要があります

namedQuery.setParameterList("stringId", strIds);
18
Michael Legart

これは非常に誤解を招くエラーであり、さまざまな原因が原因である可能性があります。私にとっては、おそらく数値であるというパラメーターを設定していましたが、実行時にnullを設定していたため、binaryでした。別の機会に、春のBean作成エラーが原因でこのエラーが発生し、パラメーターも正しく設定されていませんでした。

12
mel3kings

私はこれと同じ例外に遭遇し、その理由を以下に見つけました-

私のエンティティでは、フィールドがカスタムオブジェクトにマップされていました(親子関係-@ ManyToOne)。その後、関係アノテーションは開発者によって削除されましたが、データ型は変更されませんでした。

@ManyToOneアノテーションを削除した後、@ Columnアノテーションは適切なデータ型(整数)で使用されているはずです。

2
Ujjwal