Java, Spring

[Java/DynamoDB] DynamoDBScanExpression reserved key error

혀나Lee 2018. 12. 3. 15:38

DynamoDB Scan으로 조회할 때, filter를 걸고자 하는 경우가 있다.

   public List<Test> getTestShow() {
        Map<String, AttributeValue> eav = new HashMap<>();
        eav.put(":val", new AttributeValue().withN("1"));

        DynamoDBScanExpression dynamoDBScanExpression = new DynamoDBScanExpression()
                .withFilterExpression("show = :val")
                .withExpressionAttributeValues(eav);

        return dynamoDBMapper.scan(Test.class, dynamoDBScanExpression);
    }

처음에 위와같이 작성하고 나니 "reserved key error"가 발생하는 것이다. 예약어? 왜? 뭐지???

구글 검색 후에 reserved key error가 발생하면 hash로 처리하라는 말이 있어서 .withExpressionAttributeNames를 추가했다.

   public List<Test> getTestShow() {
        Map<String, AttributeValue> eav = new HashMap<>();
        eav.put(":val", new AttributeValue().withN("1"));

        DynamoDBScanExpression dynamoDBScanExpression = new DynamoDBScanExpression()
                .withFilterExpression("#show = :val")
                .withExpressionAttributeNames(new NameMap()
                    .with("#show", "show")
                )
                .withExpressionAttributeValues(eav);

        return dynamoDBMapper.scan(Test.class, dynamoDBScanExpression);
    }

DynamoDBScanExpression에 대한 자세한 내용은 Amazon DynamoDB를 참조하면 된다. 역시 공식 문서가 짱임... 아무리 검색해봐도 결국 해결 방법은 여기서 알게됨..;;