Почему замена nameMap работает должным образом для ключа сортировки (skey), но не для вспомогательного значения атрибута JSON (jsonvalue.adminLevel)?
Моя таблица содержит этот элемент, где 'jsonvalue' хранится в формате JSON:
{ Item: {pkey=_ROOT_ADMIN, skey=admin, jsonvalue={name=adminName, userId=adminUid, hashedPass=adminHashedPass, adminLevel=0}} }
Это сканирование / фильтр успешно извлекает элемент (важна функция table.scan (), используя прямое имя атрибута и вспомогательное значение, закомментировано одно из значений nameMap):
public List<Admin> getAdminsByLevel(AdminLevel level) {
NameMap nameMap = new NameMap()
.with("#skey", "skey");
// .with("#jsonvalue_adminLevel","jsonvalue.adminLevel");
ValueMap valueMap = new ValueMap()
.withString(":skey", Admins.ADMIN_SKEY)
.withInt(":jsonvalue_adminLevel", level.getValue());
ItemCollection<ScanOutcome> items =
this.ddb.table.scan("#skey = :skey AND jsonvalue.adminLevel = :jsonvalue_adminLevel", nameMap, valueMap);
Iterator<Item> iter = items.iterator();
List<Admin> list = new ArrayList<Admin>();
while (iter.hasNext()) {
Item item = iter.next();
Admin admin = DtoUtils.toAdmin(item);
list.add(admin);
}
return list;
}
Но это сканирование / фильтр (где jsonvalue.adminLevel заменяется сопоставленным именем #jsonvalue_adminLevel) не вызывает ошибки, но также не возвращает элемент:
public List<Admin> getAdminsByLevel(AdminLevel level) {
NameMap nameMap = new NameMap()
.with("#skey", "skey")
.with("#jsonvalue_adminLevel","jsonvalue.adminLevel");
ValueMap valueMap = new ValueMap()
.withString(":skey", Admins.ADMIN_SKEY)
.withInt(":jsonvalue_adminLevel", level.getValue());
ItemCollection<ScanOutcome> items =
this.ddb.table.scan("#skey = :skey AND #jsonvalue_adminLevel = :jsonvalue_adminLevel", nameMap, valueMap);
Iterator<Item> iter = items.iterator();
List<Admin> list = new ArrayList<Admin>();
while (iter.hasNext()) {
Item item = iter.next();
Admin admin = DtoUtils.toAdmin(item);
list.add(admin);
}
return list;
}
Почему замена nameMap работает должным образом для ключа сортировки (skey), но не для вспомогательного значения атрибута JSON (jsonvalue.adminLevel)?