gpt4 book ai didi

java - JPA 类型查询 : Parameter value element did not match expected type

转载 作者:行者123 更新时间:2023-11-30 03:55:38 24 4
gpt4 key购买 nike

我正在使用 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[] ?请帮忙!

注意:这是从通用例程中提取和简化的代码,我无法将“Object valueArr”更改为 String[],因为它被其他人使用...

最佳答案

您有一个 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));

关于java - JPA 类型查询 : Parameter value element did not match expected type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23264935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com