Apache Ignite 缓存 "IN" 子句不起作用
Apache Ignite cache "IN" clause not working
我想做的是
final String query = "select userName from users where userId in
(?) and isActive = 1";
SqlFieldsQuery sql = new SqlFieldsQuery(query);
List<Long> userIds = new ArrayList<Long>();
userIds.add(140l);
userIds.add(245l);
sql.setArgs(userIds.toArray());
List<List<?>> rsList = usersCache.query(sql).getAll();
。它没有给出预期的结果。它只返回一个结果
而不是两个。
请推荐
无法将数组作为参数传递给 in
。您可以重写查询以改用联接。它将如下所示:
select u.userName from users u
join table (userId bigint=?) t on u.userId=t.userId
where u.isActive=1
您应该考虑的另一件事是 SqlFieldsQuery.setArgs(...)
将可变参数作为参数。所以,为了防止你的数组被展开,你应该添加一个强制转换到 Object
:
sql.setArgs((Object)userIds.toArray());
我想做的是
final String query = "select userName from users where userId in
(?) and isActive = 1";
SqlFieldsQuery sql = new SqlFieldsQuery(query);
List<Long> userIds = new ArrayList<Long>();
userIds.add(140l);
userIds.add(245l);
sql.setArgs(userIds.toArray());
List<List<?>> rsList = usersCache.query(sql).getAll();
。它没有给出预期的结果。它只返回一个结果
而不是两个。
请推荐
无法将数组作为参数传递给 in
。您可以重写查询以改用联接。它将如下所示:
select u.userName from users u
join table (userId bigint=?) t on u.userId=t.userId
where u.isActive=1
您应该考虑的另一件事是 SqlFieldsQuery.setArgs(...)
将可变参数作为参数。所以,为了防止你的数组被展开,你应该添加一个强制转换到 Object
:
sql.setArgs((Object)userIds.toArray());