Annotazioni Java per DynamoDB - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Annotazioni Java per DynamoDB

In questa sezione vengono descritte le annotazioni disponibili per la mappatura delle classi e delle proprietà alle tabelle e agli attributi in Amazon DynamoDB.

Per la documentazione Javadoc corrispondente, vedere il riepilogo dei tipi di annotazione nel riferimento.AWS SDK for Java API

Nota

Nelle seguenti annotazioni, sono obbligatori solo DynamoDBTable e DynamoDBHashKey.

D ynamoDBAttribute

Mappa una proprietà all'attributo della tabella. Per impostazione predefinita, ogni proprietà di classe si mappa a un attributo item con lo stesso nome. Tuttavia, se i nomi non sono gli stessi, puoi utilizzare questa annotazione per mappare una proprietà all'attributo. Nel frammento Java seguente, DynamoDBAttribute mappa la proprietà BookAuthors al nome di attributo Authors della tabella.

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

DynamoDBMapper utilizza Authors come nome di attributo quando salva l'oggetto nella tabella.

D ynamoDBAuto GeneratedKey

Contrassegna una chiave di partizione o una proprietà della chiave di ordinamento come generata automaticamente. DynamoDBMappergenera un valore casuale UUIDdurante il salvataggio di questi attributi. Solo le proprietà String possono essere contrassegnate come chiavi generate automaticamente.

L'esempio seguente illustra l'utilizzo delle chiavi generate automaticamente.

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

D ynamoDBAuto GeneratedTimestamp

Genera automaticamente un timestamp.

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

Facoltativamente, la strategia di generazione automatica può essere definita fornendo un attributo di strategia. Il valore predefinito è ALWAYS.

D ynamoDBDocument

Indica che una classe può essere serializzata come un documento di Amazon DynamoDB.

Ad esempio, supponiamo di voler mappare un JSON documento a un attributo DynamoDB di tipo Map (). M Il seguente esempio di codice definisce un item contenente un attributo nidificato (Pictures) di 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; } } }

Puoi quindi salvare un nuovo item ProductCatalog, con Pictures, come mostrato nell'esempio seguente.

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'ProductCatalogelemento risultante sarebbe simile al seguente (in JSON formato).

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

ynamoDBHashTasto D

Mappa una proprietà di classe alla chiave di partizione della tabella. La proprietà deve essere uno dei tipi di stringa, numero o binario scalari. La proprietà non può essere un tipo di raccolta.

Supponi di avere una tabella, ProductCatalog, che abbia come chiave primaria l'Id. Il seguente codice Java definisce una classe CatalogItem e mappa la sua proprietà Id alla chiave primaria della tabella ProductCatalog utilizzando il tag @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. }

D ynamoDBIgnore

Indica all'istanza DynamoDBMapper che la proprietà associata deve essere ignorata. Quando salvi i dati nella tabella, DynamoDBMapper non salva questa proprietà nella tabella.

Applicato al metodo getter o al campo della classe per una proprietà non modellata. Se l'annotazione viene applicata direttamente al campo della classe, il getter e il setter corrispondenti devono essere dichiarati nella stessa classe.

D ynamoDBIndex HashKey

Mappa una proprietà di classe alla chiave di partizione di un indice secondario globale. La proprietà deve essere uno dei tipi di stringa, numero o binario scalari. La proprietà non può essere un tipo di raccolta.

Utilizza questa annotazione se è necessario eseguire una Query su un indice secondario globale. È necessario specificare il nome dell'indice (globalSecondaryIndexName). Se il nome della proprietà di classe è diverso dalla chiave di partizione dell'indice, è necessario inoltre specificare il nome di tale attributo dell'indice (attributeName).

D ynamoDBIndex RangeKey

Associa una proprietà di classe alla chiave di ordinamento di un indice secondario globale o di un indice secondario locale. La proprietà deve essere uno dei tipi di stringa, numero o binario scalari. La proprietà non può essere un tipo di raccolta.

Utilizza questa annotazione se è necessario eseguire una Query su un indice secondario locale o globale e si desidera rifinire i risultati utilizzando la chiave di ordinamento dell'indice. È necessario specificare il nome dell'indice (globalSecondaryIndexName, oppure localSecondaryIndexName). Se il nome della proprietà di classe è diverso dalla chiave di ordinamento dell'indice, è necessario inoltre specificare il nome di tale attributo dell'indice (attributeName).

ynamoDBRangeTasto D

Mappa una proprietà di classe alla chiave di ordinamento della tabella. La proprietà deve essere uno dei tipi di stringa, numero o binario scalari. Non può essere un tipo di raccolta.

Se la chiave primaria è composita (chiave di partizione e chiave di ordinamento), puoi utilizzare questo tag per mappare il campo della classe alla chiave di ordinamento. Ad esempio, supponiamo che tu abbia una tabella Reply in cui vengono memorizzate le risposte dei thread di un forum. Ogni thread può contenere molte risposte. Pertanto, la chiave primaria di questa tabella è sia ThreadId sia ReplyDateTime. La chiave di partizione è ThreadId e la chiave di ordinamento è ReplyDateTime.

Il seguente codice Java definisce una classe Reply e la mappa alla tabella Reply. Esso utilizza sia il tag @DynamoDBHashKey che @DynamoDBRangeKey per identificare le proprietà di classe che si mappano alla chiave primaria.

@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. }

D ynamoDBTable

Identifica la tabella di destinazione di DynamoDB. Ad esempio, il seguente codice Java definisce una classe Developer e la mappa alla tabella People in DynamoDB.

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

L'annotazione @DynamoDBTable può essere ereditata. Tutte le nuove classi che ereditano dalla classe Developer vengono pure mappate alla tabella People. Ad esempio, supponiamo che tu abbia creato una classe Lead che erediti dalla classe Developer. Poiché hai mappato la classe Developer alla tabella People, anche gli oggetti della classe Lead vengono memorizzati nella stessa tabella.

@DynamoDBTable può anche essere sovrascritto. Tutte le nuove classi che ereditano dalla classe Developer vengono mappate alla stessa tabella People per impostazione predefinita. Tuttavia, puoi sovrascrivere questa mappatura predefinita. Ad esempio, se crei una classe che eredita dalla classe Developer, puoi mapparla esplicitamente a un'altra tabella aggiungendo l'annotazione @DynamoDBTable, come riportato nel seguente esempio di codice Java.

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

D ynamoDBType Convertito

Annotazione per contrassegnare che una proprietà utilizza un convertitore di tipi personalizzato. Può essere annotata su un'annotazione definita dall'utente per passare proprietà aggiuntive a DynamoDBTypeConverter.

L'interfaccia DynamoDBTypeConverter consente di mappare i propri tipi di dati arbitrari a un tipo di dati supportato in nativo da DynamoDB. Per ulteriori informazioni, consulta Mappatura dei dati arbitrari.

D ynamoDBTyped

Annotazione per sovrascrivere il vincolo del tipo di attributo standard. I tipi standard non richiedono l'annotazione se viene loro applicato il vincolo di attributo predefinito per quel tipo.

ynamoDBVersionAttributo D

Identifica una proprietà di classe per archiviare un numero di versione di blocco ottimistico. DynamoDBMapper assegna un numero di versione a detta proprietà quando salva un nuovo item e lo incrementa ogni volta che lo aggiorni. Sono supportati soltanto i tipi scalari di numero. Per ulteriori informazioni sui tipi di dati, consulta Tipi di dati. Per ulteriori informazioni sulla funzione Controllo delle versioni, consulta Blocco ottimistico con il numero di versione.