You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在带参数的Infinispan查询中使用'in'运算符?

问题原因

Infinispan 12.1.7版本使用的Ickle查询语法对IN子句的参数绑定存在特定限制,你遇到的两个报错分别对应语法规则、参数类型兼容问题:

  1. 首次报':'不允许使用:是因为该版本Ickle语法要求IN子句后的命名参数必须包裹在括号内,不支持in :参数名的裸写格式
  2. 调整后报java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable:是因为框架没有对Arrays.asList()生成的固定长度集合类做兼容处理,会误将集合整体识别为单值字段尝试做类型转换,导致转型失败

解决方案

按以下两步调整代码即可正常执行查询:

  • 保留带括号的IN参数语法:
Query<Foo> query = qf.create("from com.test.app.Foo where id in (:ids)");
  • 将传入的集合参数转换为标准java.util.ArrayList类型后再绑定,不要直接传入Arrays.asList()生成的集合、不可变集合:
// 转换原有集合为标准ArrayList
List<String> standardIds = new ArrayList<>(idsArrayList);
query.setParameter("ids", standardIds);

如果查询的集合元素数量小于等于500,该写法的查询性能没有明显问题,不需要额外调整。

内容的提问来源于stack exchange,提问作者Noy Gafni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:36:06