我正在使用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 []因为它被用于其他人......
答案 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));