SqlQuery не возвращает результатов, но ScanQuery содержит результат - PullRequest
0 голосов
/ 20 февраля 2019

Кэш в 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]                |
+-------------------------------------------------------------------------------------------------------------------------------------------------------+

В моем проекте весенней загрузки я делаю следующий запрос:

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

У кого-нибудь есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Как вы указали:

Ignite будет индексировать только те записи кэша, где типы ключей и значений соответствуют ожидаемым в ваших таблицах.Вы можете хранить любые типы в кэше, но таблица будет принимать только один тип ключа и один тип значения.Кроме того, у вас может быть несколько таблиц на кэш, если их типы не перекрываются.

Записи, типы которых не соответствуют ни одной таблице, будут присутствовать в кэше, но не будут доступны через SQL.Это то, что вы заметили, когда имя пакета было com.test.domain.cache.Domain в конфигурации, но com.test.domain.Domain на практике (или наоборот).

0 голосов
/ 20 февраля 2019

Попробуйте обновить вторую строку:

trackdomainSqlQuery.setArgs(31L);

Ваш ключевой класс длинный, но вы передаете целое число.(Я не видел этого в Java, но у меня была та же проблема с использованием Python API.)

...