JPA如何获取Criteria API中使用的参数标记的数量?

时间:2014-08-28 10:02:32

标签: java jpa eclipselink criteria-api

如何获取Criteria API中使用的参数标记数?

我正在使用Criteria API创建带有IN关键字的SQL语句,该关键字包含许多参数标记。

CriteriaBuilder cb = ...
...
CriteriaBuilder.In<String> in = cb.in(...);
...
for (...) {
    in.value(...);
}

我开始获得SQLException“准备或可调用语句有超过2000个参数标记。”

有没有办法获得到目前为止使用的参数标记的实际数量?我可以自己算一下,但这很容易出错。

1 个答案:

答案 0 :(得分:1)

既然你知道你有可能在某个时候达到参数限制,因为它不能无限,为什么不在你的代码中处理它呢?

将参数数组分解为块,运行每个块的查询并将结果汇​​总到一个循环中。

然后你不在乎实际的参数数量是多少。它永远不会超过你决定的尺寸。

public static List<<List<Long>> chunkifyIdList(List<Long>, int chunkSize) {
    ...
}

List<MyObject> results = new ArrayList<MyObject>();
for (List<Long> chunk: chunkifyIdList(inputData)) {
    results.add(myDAO.findAll(chunk));
}