Annotations Java pour DynamoDB - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Annotations Java pour DynamoDB

Cette section décrit les annotations disponibles pour le mappage de vos classes et propriétés à des tables et attributs dans Amazon DynamoDB.

Pour la documentation Javadoc correspondante, consultez Annotation Types Summary dans la Référence d'API AWS SDK for Java.

Note

Dans les annotations suivantes, seules DynamoDBTable et DynamoDBHashKey sont obligatoires.

DynamoDBAttribute

Mappe une propriété avec un attribut de table. Par défaut, chaque propriété de classe mappe un attribut d'élément avec le même nom. Toutefois, si les noms ne sont pas les mêmes, vous pouvez utiliser cette annotation pour mapper une propriété avec l'attribut. Dans l'extrait Java suivant, l'DynamoDBAttribute mappe la propriété BookAuthors avec le nom d'attribut Authors de la table.

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

Le DynamoDBMapper utilise Authors en tant que nom d'attribut lors de l'enregistrement de l'objet vers la table.

DynamoDB AutoGeneratedKey

Marque une propriété de clé de tri ou de clé de partition comme étant générée automatiquement. DynamoDBMapper génère un UUID aléatoire lors de l'enregistrement de ces attributs. Seules les propriétés String peuvent être marquées en tant que clés générées automatiquement.

L'exemple suivant illustre l'utilisation clés générées automatiquement.

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

DynamoDB AutoGeneratedTimestamp

Génère automatiquement un horodatage.

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

(Facultatif) La stratégie de génération automatique peut être définie en fournissant un attribut de stratégie. L’argument par défaut est ALWAYS.

DynamoDBDocument

Indique qu'une classe peut être sérialisée sous forme de document Amazon DynamoDB.

Par exemple, supposons que vous voulez mapper un document JSON à un attribut DynamoDB de type Map (M). L'exemple de code suivant définit un élément contenant un attribut imbriqué de type de 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; } } }

Vous pouvez alors enregistrer un nouvel élément ProductCatalog avec Pictures, comme illustré dans l'exemple suivant.

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

L'élément ProductCatalog qui en résulte se présente comme suit (au format 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" } }

DynamoDB HashKey

Mappe une propriété de classe avec la clé de partition de la table. La propriété doit être un des types binaire, numéro ou chaîne scalaire. La propriété ne peut pas être de type collection.

Supposons que vous ayez une table, ProductCatalog, qui a un Id en tant que clé primaire. Le code Java suivant définit une classe CatalogItem et mappe sa propriété Id à la clé primaire de la table ProductCatalog à l'aide de la balise @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

Indique à l'instance DynamoDBMapper que la propriété associée doit être ignorée. Lors de l'enregistrement de données dans la table, DynamoDBMapper ne sauvegarde pas cette propriété dans la table.

S'applique à la méthode getter ou au champ de classe pour une propriété non modélisée. Si l'annotation est appliquée directement au champ de classe, les méthodes getter et setter correspondantes doivent être déclarées dans la même classe.

DynamoDB IndexHashKey

Mappe une propriété de classe à la clé de partition d'un index secondaire global. La propriété doit être un des types binaire, numéro ou chaîne scalaire. La propriété ne peut pas être de type collection.

Utilisez cette annotation si vous devez interroger (Query) un index secondaire global. Vous devez spécifier le nom d'index (globalSecondaryIndexName). Si le nom de la propriété de classe est différent de la clé de partition d'index, vous devez également spécifier le nom de cet attribut d'index (attributeName).

DynamoDB IndexRangeKey

Mappe une propriété de classe à la clé de tri d'un index secondaire global ou local. La propriété doit être un des types binaire, numéro ou chaîne scalaire. La propriété ne peut pas être de type collection.

Utilisez cette annotation si vous devez interroger (Query) un index secondaire local ou global, et souhaitez affiner vos résultats à l'aide de la clé de tri d'index. Vous devez spécifier le nom d'index (soit globalSecondaryIndexName, soit localSecondaryIndexName). Si le nom de la propriété de classe est différent de la clé de tri d'index, vous devez également spécifier le nom de cet attribut d'index (attributeName).

DynamoDB RangeKey

Mappe une propriété de classe avec la clé de tri de la table. La propriété doit être un des types binaire, numéro ou chaîne scalaire. Elle ne peut pas être de type collection.

Si la clé primaire est composite (clé de partition et clé de tri), vous pouvez utiliser cette balise pour mapper votre champ de classe avec la clé de tri. Par exemple, supposons que vous ayez une table Reply qui stocke les réponses pour les threads de forum. Chaque thread peut avoir plusieurs réponses. Ainsi, la clé primaire de cette table est à la fois ThreadId et ReplyDateTime. La clé de partition est ThreadId et la clé de tri est ReplyDateTime.

L'extrait de code Java suivant définit une classe Reply et la mappe à la table Reply. Il utilise les deux balises, @DynamoDBHashKey et @DynamoDBRangeKey, pour identifier les propriétés de classe qui sont mappées avec la clé primaire.

@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

Identifie la table cible dans DynamoDB. Par exemple, l'extrait de code Java suivant définit une classe Developer et la mappe à la table People dans DynamoDB.

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

L'annotation @DynamoDBTable peut être héritée. Toute nouvelle classe qui hérite de la classe Developer se mappe également à la table People. Par exemple, supposons que vous génériez une classe Lead qui hérite de la classe Developer. Étant donné que vous avez mappé la classe Developer à la table People, les objets de la classe Lead sont également stockés dans la même table.

La @DynamoDBTable peut également être remplacée. Toute nouvelle classe qui hérite de la classe Developer par défaut se mappe à la même table People. Toutefois, vous pouvez substituer ce mappage par défaut. Par exemple, si vous créez une classe qui hérite de la classe Developer, vous pouvez explicitement la mapper à une autre table en ajoutant l'annotation @DynamoDBTable comme illustré dans l'extrait de code Java suivant.

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

DynamoDB TypeConverted

Une annotation permettant d'indiquer qu'une propriété utilise un convertisseur personnalisé. Peut être indiquée sur une annotation définie par l'utilisateur afin de transmettre des propriétés à DynamoDBTypeConverter.

L'interface DynamoDBTypeConverter vous permet de mapper vos propres types de données arbitraires à un type de données que DynamoDB prend en charge en mode natif. Pour plus d’informations, consultez Mappage des données arbitraires.

DynamoDBTyped

Une annotation permettant de remplacer la liaison du type d'attribut standard. Les types standard ne nécessitent pas l'annotation si la liaison d'attribut par défaut est appliquée pour ce type.

DynamoDB VersionAttribute

Identifie une propriété de classe pour stocker un numéro de version de verrouillage optimiste. DynamoDBMapper affecte un numéro de version à cette propriété lorsqu'il enregistre un nouvel élément et l'augmente chaque fois que vous mettez à jour l'élément. Seuls les types scalaires de numéros sont pris en charge. Pour plus d'informations sur les types de données, consultez Types de données, Pour plus d’informations sur la gestion des versions, consultez Verrouillage optimiste avec numéro de version.