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

Posted

技术标签:

【中文标题】JPA 如何获取 Criteria API 中使用的参数标记的数量?【英文标题】:JPA How to get the number of parameter markers used in Criteria API? 【发布时间】:2014-08-28 10:02:32 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案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));

【讨论】:

以上是关于JPA 如何获取 Criteria API 中使用的参数标记的数量?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA Criteria API,你能做一个只导致一个连接的 fetch join 吗?

如何在 JPA Criteria API 上正确使用 JOIN

如何使用 JPA Criteria API / Hibernate 按 Case 语句分组

如何在JPA Criteria查询API中编写自定义查询作为根?

JPA Criteria API where subclass - 出现错误:无法针对路径 [null] 解析属性 [lastName]

使用 JPA 的 Criteria API 按日期间隔分组