メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

DynamoDB 用の Java 注釈

このセクションでは、クラスとプロパティをテーブルと属性にマッピングするときに使用できる注釈について説明します。

対応する Javadoc ドキュメントについては、「AWS SDK for Java API Reference」の「Annotation Types Summary」を参照してください。

注記

次の注釈では、DynamoDBTableDynamoDBHashKey だけが必須です。

DynamoDBAttribute

テーブルの属性にプロパティをマッピングします。デフォルトでは、各クラスのプロパティが、同じ名前の項目属性にマッピングされます。ただし名前が同じでない場合は、この注釈を使用して属性にプロパティをマッピングすることができます。次の Java コードスニペットでは、DynamoDBAttribute によって、BookAuthors プロパティがテーブル内の 属性名にマッピングされています。Authors

Copy
@DynamoDBAttribute(attributeName = "Authors") public List<String> getBookAuthors() { return BookAuthors; } public void setBookAuthors(List<String> BookAuthors) { this.BookAuthors = BookAuthors; }

DynamoDBMapper では、テーブルにオブジェクトを保存する際に、 を属性名として使用しています。Authors

DynamoDBAutoGeneratedKey

パーティションキーまたはソートキーのプロパティは、自動生成済みとしてマーキングされます。DynamoDBMapper は、これらの属性を保存するときにランダムな UUID を生成します。String プロパティには、自動生成済みのキーとしてマーキングできます。

次のスニペットは、自動生成されたキーの使用方法を示しています。

Copy
@DynamoDBTable(tableName="AutoGeneratedKeysExample") public class AutoGeneratedKeys { private String id; private String payload; @DynamoDBHashKey(attributeName = "Id") @DynamoDBAutoGeneratedKey public String getId() { return id; } public void setId(String id) { this.id = id; } @DynamoDBAttribute(attributeName="payload") public String getPayload() { return this.payload; } public void setPayload(String payload) { this.payload = payload; } public static void saveItem() { AutoGeneratedKeys obj = new AutoGeneratedKeys(); obj.setPayload("abc123"); // id field is null at this point DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient); mapper.save(obj); System.out.println("Object was saved with id " + obj.getId()); } }

DynamoDBDocument

DynamoDB ドキュメントとしてシリアル化できるクラスを示します。

たとえば、JSON ドキュメントをマップ型 (M) の DynamoDB 属性にマッピングしたいとします。次のコードスニペットでは、マップ型の入れ子の属性 (Pictures) を含む項目を定義します。

Copy
public class ProductCatalogItem { private Integer id; //partition key private Pictures pictures; /* ...other attributes omitted... */ @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id;} public void setId(Integer id) {this.id = id;} @DynamoDBAttribute(attributeName="Pictures") public Pictures getPictures() { return pictures;} public void setPictures(Pictures pictures) {this.pictures = pictures;} // Additional properties go here. @DynamoDBDocument public static class Pictures { private String frontView; private String rearView; private String sideView; @DynamoDBAttribute(attributeName = "FrontView") public String getFrontView() { return frontView; } public void setFrontView(String frontView) { this.frontView = frontView; } @DynamoDBAttribute(attributeName = "RearView") public String getRearView() { return rearView; } public void setRearView(String rearView) { this.rearView = rearView; } @DynamoDBAttribute(attributeName = "SideView") public String getSideView() { return sideView; } public void setSideView(String sideView) { this.sideView = sideView; } } }

次に、次のコードスニペットに示すように、新しい ProductCatalog 項目を、Pictures とともに保存できます。

Copy
ProductCatalogItem item = new ProductCatalogItem(); Pictures pix = new Pictures(); pix.setFrontView("http://example.com/products/206_front.jpg"); pix.setRearView("http://example.com/products/206_rear.jpg"); pix.setSideView("http://example.com/products/206_left_side.jpg"); item.setPictures(pix); item.setId(123); mapper.save(item);

その結果、ProductCatalog 項目は次のようになります (JSON 形式)。

Copy
{ "Id" : 123 "Pictures" : { "SideView" : "http://example.com/products/206_left_side.jpg", "RearView" : "http://example.com/products/206_rear.jpg", "FrontView" : "http://example.com/products/206_front.jpg" } }

DynamoDBHashKey

テーブルのパーティションキーにクラスプロパティをマッピングします。このプロパティは、スカラー文字列型、数値型、バイナリ型のいずれかである必要があります。コレクション型は使用できません。

Id がプライマリキーである ProductCatalog テーブルがあるとします。次の Java コードスニペットでは、CatalogItem クラスを定義し、その Id プロパティを @DynamoDBHashKey タグを使用して ProductCatalog テーブルのプライマリキーにマッピングしています。

Copy
@DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private Integer Id; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return Id; } public void setId(Integer Id) { this.Id = Id; } // Additional properties go here. }

DynamoDBIgnore

DynamoDBMapper インスタンスに対して、関連するプロパティを無視するように指示します。テーブルにデータを保存する場合、DynamoDBMapper ではこのプロパティがテーブルに保存されません。

DynamoDBIndexHashKey

グローバルセカンダリインデックスのパーティションキーにクラスプロパティをマッピングします。このプロパティは、スカラー文字列型、数値型、バイナリ型のいずれかである必要があります。コレクション型は使用できません。

この注釈は、グローバルセカンダリインデックスの Query を実行する必要がある場合に使用します。インデックス名(globalSecondaryIndexName)を指定する必要があります。クラスプロパティの名前がインデックスのパーティションキーと異なる場合、そのインデックス属性の名前 (attributeName) も指定する必要があります。

DynamoDBIndexRangeKey

グローバルセカンダリインデックスまたはlocal secondary indexのソートキーにクラスプロパティをマッピングします。このプロパティは、スカラー文字列型、数値型、バイナリ型のいずれかである必要があります。コレクション型は使用できません。

この注釈は、local secondary indexまたはグローバルセカンダリインデックスの Query を実行し、インデックスキーを使用して結果を絞り込む必要がある場合に使用します。インデックス名(globalSecondaryIndexName または localSecondaryIndexName)を指定する必要があります。クラスプロパティの名前がインデックスのソートキーと異なる場合、そのインデックス属性の名前 (attributeName) も指定する必要があります。

DynamoDBMarshalling

カスタムマーシャラーを使用するクラスプロパティを識別します。この注釈を DynamoDBMarshaller クラスと一緒に使用すると、独自の任意のデータ型を DynamoDB によってネイティブにサポートされているデータ型にマッピングできます。詳細については、「任意データのマッピング」を参照してください。

DynamoDBNativeBoolean

クラスの boolean (または Boolean) 属性を、ネイティブな DynamoDB BOOL データ型として扱うことを示します。

たとえば、CatalogItem を使用して、ProductCatalog テーブルに項目をマッピングすることができます。属性 (InStock) の 1 つをブール型としてモデリングするには、次のように DynamoDBNativeBoolean 注釈を使用します。

Copy
@DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private String Id; private Boolean inStock; @DynamoDBHashKey(attributeName="Id") // Getters and setters for Id go here @DynamoDBNativeBoolean @DynamoDBAttribute(attributeName = "InStock") public boolean getInStock() { return inStock; } public void setInStock(boolean inStock) { this.inStock = inStock; } // Additional properties go here. }

注記

以前のバージョンの DynamoDBMapper で、ブール属性は DynamoDB の Number データ型 (N) として表され、1 は true、0 は false と解釈されました。テーブルからデータを読み込むすべてのアプリケーションが、更新されたバージョンの DynamoDBMapper を使用していない限り、DynamoDBNativeBoolean の注釈を使用しないでください。

DynamoDBRangeKey

テーブルのソートキーにクラスプロパティをマッピングします。このプロパティは、スカラー文字列型、数値型、バイナリ型のいずれかである必要があります。コレクション型は使用できません。

プライマリキーが複合の場合 (パーティションキーとソートキー)、このタグを使用して、クラスフィールドをソートキーにマッピングできます。たとえば、フォーラムスレッドからの返信を格納する Reply テーブルがあるとします。各スレッドには多数の返信がある可能性があります。したがってこのテーブルのプライマリキーは、ThreadId と ReplyDateTime の両方になります。ThreadId がパーティションキーで、ReplyDateTime がソートキーです。次の Java コードスニペットでは、Reply クラスを定義して Reply テーブルにマッピングしています。ここでは、@DynamoDBHashKey タグと @DynamoDBRangeKey タグの両方を使用して、プライマリキーにマッピングされるクラスプロパティを識別しています。

Copy
@DynamoDBTable(tableName="Reply") public class Reply { private Integer id; private String replyDateTime; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @DynamoDBRangeKey(attributeName="ReplyDateTime") public String getReplyDateTime() { return replyDateTime; } public void setReplyDateTime(String replyDateTime) { this.replyDateTime = replyDateTime; } // Additional properties go here. }

DynamoDBTable

DynamoDB でターゲットテーブルを識別します。たとえば次の Java コードスニペットでは、Developer クラスを定義して、DynamoDB の People テーブルにマッピングしています。

Copy
@DynamoDBTable(tableName="People") public class Developer { ...}

@DynamoDBTable 注釈は継承できます。Developer クラスから継承された新しいクラスも、People テーブルにマッピングされます。たとえば、Developer クラスから継承された Lead クラスを作成したとします。Developer クラスを People テーブルにマッピングしたことで、Lead クラスオブジェクトも同じテーブルに格納されます。

@DynamoDBTable もオーバーライドできます。デフォルトで Developer クラスから継承された新しいクラスは、同じ People テーブルにマッピングされます。ただし、このデフォルトのマッピングはオーバーライドできます。たとえば、Developer クラスから継承したクラスを作成した場合には、次の Java コードスニペットに示すように、@DynamoDBTable 注釈を追加することで、別のテーブルに明示的にマッピングできます。

Copy
@DynamoDBTable(tableName="Managers") public class Manager extends Developer { ...}

DynamoDBVersionAttribute

オプティミスティックロックのバージョン番号を格納するためのクラスプロパティを識別します。DynamoDBMapper は、新しい項目を保存するときにこのプロパティにバージョン番号を割り当てます。バージョン番号は項目を更新するたびに増えていきます。サポートされているのは番号によるスカラー型だけです。データ型の詳細については、「データ型」を参照してください。バージョニングの詳細については、「バージョン番号を使用したオプティミスティックロック」を参照してください。