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 |
댓글