Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

DynamoDB 的 Java 注释

此部分介绍可用于将类和属性映射到表和属性的注释。

有关相应的 Javadoc 文档,请参阅 AWS SDK for Java API Reference中的注释类型摘要

注意

在以下注释中,只有 DynamoDBTableDynamoDBHashKey 是必需的。

DynamoDBAttribute

将属性映射到表属性。默认情况下,每个类属性都会映射到具有同名的项目属性。但是,如果名称不同,您可以使用此注释将某一属性映射到表属性。在以下 Java 代码段中,DynamoDBAttributeBookAuthors 属性映射到表中的 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。只有字符串属性可被标记为自动生成键。

以下代码段演示怎样使用自动生成的键。

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 文档映射到类型为 Map (M) 的 DynamoDB 属性。使用以下代码段来定义包含类型为 Map 的嵌套属性 (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; } } }

然后,您可以保存一个包含 Pictures 的新 ProductCatalog 项目,如以下代码段中所示:

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

生成的 ProductCatalog 项目将如下所示 (JSON 格式):

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

DynamoDBHashKey

将类属性映射到表的分区键。属性必须是标量字符串、数字或二进制类型,不能是集合类型。

假定您有一个 ProductCatalog 表,这个表使用 Id 作为主键。以下 Java 代码段定义了一个 CatalogItem 类,并使用 @DynamoDBHashKey 标签将其 Id 属性映射到 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 操作,并想使用索引排序键细化结果,请使用此注释。必须指定索引名称 (globalSecondaryIndexNamelocalSecondaryIndexName)。如果类属性的名称不同于索引排序键,则您还必须指定该索引属性的名称 (attributeName)。

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 表。例如,假定您创建了一个 Lead 类,它继承自 Developer 类。由于您将 Developer 类映射到了 People 表,因此 Lead 类数据元也存储于同一表中。

@DynamoDBTable 也可以被覆盖。默认情况下,继承自 Developer 类的任何新类都可映射到同一 People 表。然而,您可以覆盖这一默认映射。例如,如果您创建的某个类继承自 Developer 类,您就可以通过添加 @DynamoDBTable 注释明确将其映射到另一个表 (如以下 Java 代码段所示)。

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

DynamoDBTypeConverted

用于将属性标记为使用自定义类型转换器的注释。可以在用户定义的注释上被注释以将更多属性传递到 DynamoDBTypeConverter

DynamoDBTypeConverter 接口可让您将自己的任意数据类型映射到本机受 DynamoDB 支持的数据类型。有关更多信息,请参阅 映射任意数据

DynamoDBTyped

用于覆盖标准属性类型绑定的注释。如果应用了针对标准类型的默认属性绑定,则该类型不需要该注释。

DynamoDBVersionAttribute

确定一个类属性以存储乐观锁版本号。DynamoDBMapper 会在保存新项目时为此属性分配版本号,并且会在您每次更新该项目时增加版本号的值。仅支持数字标量类型。有关数据类型的更多信息,请参阅 数据类型。有关版本控制的更多信息,请参阅乐观锁 (使用版本号)