JPA TypedQuery:参数值元素与预期类型不匹配

时间:2014-04-24 09:27:43

标签: java hibernate jpa

我正在使用JPA 2.0并在DAO层中使用以下代码:

public void test() {
  String key = "status";
  String[] statuses = {"A", "B"};
  List<TestTable> result = find(key, statuses);
}

public List<TestTable> find(String key, Object valueArr) {
  String sql = "SELECT nd FROM TestTable nd WHERE nd." + key + " IN :" + key;
  TypedQuery<TestTable> query = entityManager.createQuery(sql, TestTable.class);
  query.setParameter(key, Arrays.asList(valueArr))//***Error Line***
  return query.getResultList();
}

在上面的错误行中,它会抛出以下异常:

java.lang.IllegalArgumentException: Parameter value element [[Ljava.lang.String;@cbe5bc] did not match expected type [java.lang.String]

为什么期望类型是String而实际上它是String []?请帮忙!

注意:这是从通用例程中提取和简化的代码我无法更改&#39; Object valueArr&#39;到String []因为它被用于其他人......

1 个答案:

答案 0 :(得分:2)

您已获得Object类型的变量,并且您正在调用Arrays.asList。这意味着您已经有效地致电:

List<Object> values = Arrays.asList(new Object[] {valueArr});

因此,您要创建单个元素的列表,其中该元素是一个数组。这不是你想要的......你想要一个List<Object>元素和你开始时一样多的元素。最简单的方法是更改​​参数类型:

public List<TestTable> find(String key, Object[] values)

...

query.setParameter(key, Arrays.asList(values));