본문 바로가기
Java, Spring

[Java/DynamoDB] DynamoDBScanExpression reserved key error

by 혀나Lee 2018. 12. 3.

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를 참조하면 된다. 역시 공식 문서가 짱임... 아무리 검색해봐도 결국 해결 방법은 여기서 알게됨..;;

'Java, Spring' 카테고리의 다른 글

Java 기초지식  (0) 2022.07.21
[SpringBoot/JSP] Enum 한글 사용하기  (0) 2018.11.27
[IntelliJ] cannot resolve method  (1) 2018.11.26
[Spring Boot] custom error page  (0) 2018.09.27
[Java, Mybatis] foreach 문법  (0) 2017.03.20

댓글