1. ホーム
  2. java

[解決済み] java.sql.SQLException: ORA-00932: データ型の不一致: 期待した NUMBER は BINARY になりました。

2022-02-18 08:37:04

質問

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;
}

を渡したい。 List<Integer> strIds をstringIdで指定し、以下のように名前付きクエリに入力します。

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) は正常に動作し を渡すと Integer(strIds) の代わりに List<Integer> strIds をクエリに追加すると、正常に動作します。

Oracle 10gを使用しています。

どのように解決するのですか?

を使うだけでいいと思います。

 IN :stringId

ではなく

 IN (:stringId)

JPA用

namedQuery.setParameter("stringId", strIds);

が正しいのですが、Hibernateの場合は

namedQuery.setParameterList("stringId", strIds);