Anotaciones de Java para DynamoDB - Amazon DynamoDB

Anotaciones de Java para DynamoDB

En esta sección se describen las anotaciones que están disponibles para mapear las clases y las propiedades a las tablas y los atributos en Amazon DynamoDB.

Para obtener la documentación de Javadoc correspondiente, consulte Annotation Types Summary (Resumen de tipos de anotaciones) en la Referencia de la API AWS SDK for Java.

nota

En las anotaciones siguientes, solo son obligatorias DynamoDBTable y DynamoDBHashKey.

DynamoDBAttribute

Mapea una propiedad a un atributo de tabla. De forma predeterminada, cada propiedad de clase se mapea a un atributo de elemento con el mismo nombre. Sin embargo, si los nombres no son iguales, puede utilizar esta anotación para mapear una propiedad al atributo. En el siguiente fragmento de Java, DynamoDBAttribute mapea la propiedad BookAuthors al nombre de atributo Authors de la tabla.

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

DynamoDBMapper utiliza Authors como nombre de atributo al guardar el objeto en la tabla.

DynamoDBAutoGeneratedKey

Marca una propiedad de clave de partición o de clave de ordenación como generada automáticamente. DynamoDBMapper genera un UUID aleatorio al guardar estos atributos. Solo se pueden marcar propiedades de tipo String como claves generadas automáticamente.

El siguiente ejemplo muestra el uso de claves generadas automáticamente.

@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()); } }

DynamoDBAutoGeneratedTimestamp

Genera automáticamente una marca de tiempo.

@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.ALWAYS) public Date getLastUpdatedDate() { return lastUpdatedDate; } public void setLastUpdatedDate(Date lastUpdatedDate) { this.lastUpdatedDate = lastUpdatedDate; }

La estrategia de generación automática también puede definirse si se proporciona un atributo de estrategia. El valor predeterminado es ALWAYS.

DynamoDBDocument

Indica que una clase se puede serializar como un documento de Amazon DynamoDB.

Por ejemplo, supongamos que desea mapear un documento JSON a un atributo de DynamoDB de tipo Map (M). En el siguiente ejemplo de código se define un elemento que contiene un atributo anidado (Pictures) de tipo Map.

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; } } }

A continuación, podría guardar un nuevo elemento ProductCatalog, con Pictures, tal como se muestra en el siguiente ejemplo.

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);

El elemento ProductCatalog resultante tendría este aspecto (en formato JSON).

{ "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

Mapea una propiedad de clase a la clave de partición de la tabla. La propiedad debe ser un escalar de tipo String, Number o Binary. La propiedad no puede ser un tipo de colección.

Supongamos que tenemos una tabla, ProductCatalog, cuya clave principal es Id. En el siguiente código Java se define una clase CatalogItem y se mapea su propiedad Id a la clave principal de la tabla ProductCatalog utilizando la etiqueta @DynamoDBHashKey.

@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

Indica a la instancia DynamoDBMapper que la propiedad asociada debe pasarse por alto. Al guardar datos en la tabla, DynamoDBMapper no guarda esta propiedad en la tabla.

Se aplica al método getter o al campo de clase de una propiedad sin modelar. Si la anotación se aplica directamente al campo de clase, los métodos getter y setter correspondientes deben declararse en la misma clase.

DynamoDBIndexHashKey

Mapea una propiedad de clase a la clave de partición de un índice secundario global. La propiedad debe ser un escalar de tipo String, Number o Binary. La propiedad no puede ser un tipo de colección.

Use esta anotación si necesita Query un índice secundario global. Debe especificar el nombre de índice (globalSecondaryIndexName). Si el nombre de la propiedad de clase es distinto de la clave de partición del índice, también deberá especificar el nombre de ese atributo de índice (attributeName).

DynamoDBIndexRangeKey

Mapea una propiedad de clase a la clave de ordenación de un índice secundario global o un índice secundario local. La propiedad debe ser un escalar de tipo String, Number o Binary. La propiedad no puede ser un tipo de colección.

Use esta anotación si tiene que utilizar una operación Query en un índice secundario local o un índice secundario global y desea refinar los resultados mediante la clave de ordenación del índice. Debe especificar el nombre de índice (globalSecondaryIndexName o localSecondaryIndexName). Si el nombre de la propiedad de clase es distinto de la clave de ordenación del índice, también deberá especificar el nombre de ese atributo de índice (attributeName).

DynamoDBRangeKey

Mapea una propiedad de clase a la clave de ordenación de la tabla. La propiedad debe ser un escalar de tipo String, Number o Binary. No puede ser un tipo de colección.

Si la clave principal es compuesta (clave de partición y clave de ordenación), puede utilizar esta etiqueta para mapear el campo de clase a la clave de ordenación. Por ejemplo, supongamos que tenemos una tabla Reply en la que se almacenan las respuestas de las conversaciones de un foro. Cada conversación puede tener muchas respuestas. La clave principal de esta tabla consta de ThreadId y ReplyDateTime. ThreadId es la clave de partición y ReplyDateTime es la de orden.

En el siguiente código Java se define una clase Reply y se mapea a la tabla Reply. Se utilizan las etiquetas @DynamoDBHashKey y @DynamoDBRangeKey para identificar las propiedades de clase mapeadas a la clave principal.

@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

Identifica la tabla de destino de DynamoDB. Por ejemplo, en el siguiente código Java se define una clase Developer y se mapea a la tabla People en DynamoDB.

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

La anotación @DynamoDBTable se puede heredar. Cualquier nueva clase que herede de la clase Developer también se mapea a la tabla People. Por ejemplo, supongamos que hemos creado una clase Lead que hereda de la clase Developer. Dado que ha mapeado la clase Developer a la tabla People, los objetos de la clase Lead también se almacenan en la misma tabla.

La anotación @DynamoDBTable también se puede anular. Cualquier nueva clase que herede de la clase Developer de forma predeterminada se mapea a la misma tabla People. Sin embargo, puede anular este mapeo predeterminado. Por ejemplo, si crea una clase que hereda de la clase Developer, puede mapearla explícitamente a otra tabla agregando la anotación @DynamoDBTable, como se muestra en el siguiente ejemplo de código Java.

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

DynamoDBTypeConverted

Anotación para marcar que una propiedad usa un convertidor de tipos personalizado. Se puede usar una anotación definida por el usuario para pasar propiedades adicionales al convertidor DynamoDBTypeConverter.

La interfaz DynamoDBTypeConverter permite mapear sus propios tipos de datos arbitrarios a un tipo de datos que sea compatible de forma nativa con DynamoDB. Para obtener más información, consulte Mapeo de datos arbitrarios.

DynamoDBTyped

Anotación para anular el vínculo de tipo de atributo estándar. Los tipos estándar no requieren la anotación si se les aplica el vínculo de atributo predeterminado para ese tipo.

DynamoDBVersionAttribute

Identifica una propiedad de clase para almacenar un número de versión de bloqueo optimista. DynamoDBMapper asigna un número de versión a esta propiedad cuando guarda un elemento nuevo e incrementa su valor cada vez que se actualiza el elemento. Solo se admiten escalares de tipo Number. Para obtener más información sobre los tipos de datos, consulte Tipos de datos. Para obtener más información sobre el control de versiones, consulte Bloqueo positivo con el número de versión.