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-core
和ignite-indexing
使用的版本为 2.6.0
有人知道我在做什么错吗?
答案 0 :(得分:1)
如您所述:
Ignite将仅索引键和值类型与表期望值匹配的缓存条目。 您可以在缓存中存储任何类型,但是表将仅接受单个键类型和单个值类型。每个缓存中还可以有多个表,顺便说一句,只要它们的类型不重叠。
其类型与任何表都不匹配的条目将出现在缓存中,但不能通过SQL获得。这是您在配置包名称为com.test.domain.cache.Domain
而在实践中为com.test.domain.Domain
时观察到的结果(反之亦然)。
答案 1 :(得分:0)
尝试更新第二行:
trackdomainSqlQuery.setArgs(31L);
您的密钥类很长,但您传入的是整数。 (我没有在Java中看到这个,但是在使用Python API时遇到了同样的问题。)