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
.
Temas
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
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 Asignación de datos arbitrarios en DynamoDB.
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 DynamoDB y bloqueo positivo con el número de versión.