SqlQuery不返回结果,但ScanQuery包含结果

时间:2019-02-20 14:08:05

标签: spring spring-boot ignite

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();

查询返回一个空列表,但是如果我运行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

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

2 个答案:

答案 0 :(得分:1)

如您所述:

Ignite将仅索引键和值类型与表期望值匹配的缓存条目。 您可以在缓存中存储任何类型,但是表将仅接受单个键类型和单个值类型。每个缓存中还可以有多个表,顺便说一句,只要它们的类型不重叠。

其类型与任何表都不匹配的条目将出现在缓存中,但不能通过SQL获得。这是您在配置包名称为com.test.domain.cache.Domain而在实践中为com.test.domain.Domain时观察到的结果(反之亦然)。

答案 1 :(得分:0)

尝试更新第二行:

trackdomainSqlQuery.setArgs(31L);

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