Запрос DynamoDB по столбцам с помощью DynamoDBMapper - PullRequest
0 голосов
/ 29 марта 2020

Я использую loacalstack с настройкой DynamodB. Iv таблица с двумя столбцами, Id и имя столбца. Я изо всех сил пытаюсь запросить таблицу по имени, используя DynamoDBMapper. Ниже приведен фрагмент моей настройки

сущности>

@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "my-table")
public class Table {

   private String id;
   private String name;

   @DynamoDBHashKey(attributeName = "id")
   @DynamoDBAutoGeneratedKey
   public String getId() {
      return id;
   }

   public void setId(String id) {
      this.id = id;
   }

   @DynamoDBAttribute
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

@ query>

public Table getByName(String name) {  
   return dynamoDBMapper.load(Table.class, name);
}
aws dynamodb create-table --endpoint-url=http://localstack:4569 --table-name my-table \
          --attribute-definitions AttributeName=id,AttributeType=S AttributeName=name,AttributeType=S \
          --key-schema AttributeName=id,KeyType=HASH AttributeName=name,KeyType=RANGE \

Любая помощь приветствуется

1 Ответ

1 голос
/ 29 марта 2020

Очевидно, что вы не можете запросить таблицу по имени, так как она не является ключом раздела / ha sh. Либо вы можете использовать сканирование, либо вы должны указать name в качестве поля GSI и затем запросить его. Команда сканирования будет выглядеть следующим образом:

dynamoDBMapper.scan(Table.class, new DynamoDBScanExpression());

Приведенная выше команда будет сканировать всю таблицу. Прочитайте о DynamoDBScanExpression здесь , чтобы увидеть, как вы можете отфильтровать его с указанием c name.

. Вы можете добавить фильтр, например name, например:

public Table getByName(String name) {  
    DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    scanExpression.addFilterCondition("name", new Condition()                                           
       .withComparisonOperator(ComparisonOperator.EQ)                                                
       .withAttributeValueList(new AttributeValue().withS(name)));
    dynamoDBMapper.scan(Table.class, scanExpression);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...