SqlQuery returns 没有结果但 ScanQuery 包含结果

SqlQuery returns no results but ScanQuery contains result

Ignite 中的缓存包含以下数据:

+=======================================================================================================================================================+
|   Key Class    | Key |           Value Class           |                          Value                                                               |
+=======================================================================================================================================================+
| java.lang.Long | 1   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=-533910214, Domain=x.blub.com, id=1, advId=31]               |
| java.lang.Long | 2   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=-482120537, Domain=x.blub.de, id=2, advId=31]                |
| java.lang.Long | 3   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=-1060766828, Domain=x.blub.at, id=3, advId=31]               |
| java.lang.Long | 4   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=376860969, Domain=y.blab.com, id=4, advId=94]                |
| java.lang.Long | 5   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=1641697092, Domain=y.blib.com, id=5, advId=94]               |
| java.lang.Long | 6   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=-757055874, Domain=z.bla.com, id=6, advId=1]                  |
| java.lang.Long | 7   | o.a.i.i.binary.BinaryObjectImpl | com.test.domain.Domain [hash=-1536137434, Domain=h.bla.com, id=7, advId=20]                |
+-------------------------------------------------------------------------------------------------------------------------------------------------------+

在我的 spring-boot 项目中,我执行以下查询:

SqlQuery<Long, Domain> domainSqlQuery = new SqlQuery<>(Domain.class, "advId = ?");
trackdomainSqlQuery.setArgs(31);
List<Cache.Entry<Long, Domain>> domainCacheEntrySqlQueryResults = domainConfigurationCache.query(domainSqlQuery).getAll();

查询 returns 一个空列表,但是如果我 运行 一个 ScanQuery 我得到它们全部

List<Cache.Entry<Long, Domain>> domainCacheEntryScanQueryResults = domainConfigurationCache.query(new ScanQuery()).getAll();

这里是 ScanQuery 的结果:

[IgniteBiTuple [val1=1, val2=Domain{id=1, domain='blib.blub.com', advId=31}], 
 IgniteBiTuple [val1=2, val2=Domain{id=2, domain='blib.blub.de', advId=31}], 
 IgniteBiTuple [val1=3, val2=Domain{id=3, domain='Domain=blib.blub.at', advId=31}], 
 IgniteBiTuple [val1=4, val2=Domain{id=4, domain='blab.blab.com', advId=94}], 
 IgniteBiTuple [val1=5, val2=Domain{id=5, domain='blib.blab.com', advId=94}], 
 IgniteBiTuple [val1=6, val2=Domain{id=6, domain='blo.bla.com', advId=1}], 
 IgniteBiTuple [val1=7, val2=Domain{id=7, domain='blu.bla.com', advId=20}]]

另外,我为 ignite-coreignite-indexing 使用的 版本 2.6.0[=34] =]

有人知道我做错了什么吗?

尝试更新您的第二行:

trackdomainSqlQuery.setArgs(31L);

您的密钥 class 很长,但您传递的是一个整数。 (我在 Java 中没有看到这个,但我在使用 Python API 时遇到了同样的问题。)

如您所说:

Ignite 只会索引键和值类型符合您 table 期望的缓存条目。 您可以在缓存中存储任何类型,但 table 将只接受单键类型和单值类型。每个缓存也可以有多个 tables,顺便说一下,前提是它们的类型不重叠。

类型与 table 不匹配的条目将出现在缓存中,但无法通过 SQL 获得。这是您在配置中包名称为 com.test.domain.cache.Domain 但实际上为 com.test.domain.Domain(反之亦然)时观察到的结果。