如何获取Criteria API中使用的参数标记数?
我正在使用Criteria API创建带有IN
关键字的SQL语句,该关键字包含许多参数标记。
CriteriaBuilder cb = ...
...
CriteriaBuilder.In<String> in = cb.in(...);
...
for (...) {
in.value(...);
}
我开始获得SQLException
“准备或可调用语句有超过2000个参数标记。”
有没有办法获得到目前为止使用的参数标记的实际数量?我可以自己算一下,但这很容易出错。
答案 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));
}