はじめに
Spring BootでDynamoDBを利用した際にrange key (sort key)の利用方法を調べたので、こちらにメモします。
drejust氏のサンプルを参考に作成してます。
サンプルコード
githubのサンプルコードです。全体像が知りたい方はこちらをご覧ください。
EC2で動作確認しました。
spring-dynamodb-range-key
ポイント
pom.xml
spring-data-dynamodbを利用してますが、io.github.boostchicken氏のspring-data-dynamodbを利用してます。
※derjust氏のspring-data-dynamodb等でも動作するかもしれません。
entity
entityは2つ作成する必要があります。
1つはhash key (partition key)とrange key (sort key)をまとめたもの、1つはもう一方のKeyをまとめたEntityをKeyとするEntityです。
後者のEntityはlombokではなく、setter・ getterは自前で作成する必要がある部分があるためご注意ください。
PkEntity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data @Builder public class PkEntity { /** * Hash Key (partition key) */ @DynamoDBHashKey private String sampleHashKey; /** * Range Key (sort key) */ @DynamoDBRangeKey private String sampleRangeKey; } |
Entity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.springframework.data.annotation.Id; @Data @DynamoDBTable(tableName = "sample-table") @AllArgsConstructor @NoArgsConstructor public class Entity { @Id @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) private PkEntity pkEntity; @DynamoDBHashKey(attributeName = "sampleHashKey") public String getSampleHashKey() { return pkEntity != null ? pkEntity.getSampleHashKey() : null; } public void setSampleHashKey(String sampleHashKey) { if (pkEntity == null) { pkEntity = new PkEntity(); } pkEntity.setSampleHashKey(sampleHashKey); } @DynamoDBRangeKey(attributeName = "sampleRangeKey") public String getSampleRangeKey() { return pkEntity != null ? pkEntity.getSampleRangeKey() : null; } public void setSampleRangeKey(String sampleRangeKey) { if (pkEntity == null) { pkEntity = new PkEntity(); } pkEntity.setSampleRangeKey(sampleRangeKey); } private String sampleAttribute; } |