2015-01-22 17 views
7

Uso DynamoDBMapper e vorrei salvare condizionatamente se e solo se la combinazione di tasti hashkey e intervallo non esiste. So che ci sono modi per utilizzare gli UUID per ridurre la possibilità di una collisione, ma vorrei proteggermi usando i salvataggi condizionali.DynamoDBMapper per salvataggi condizionali

Mi sono imbattuto in this article che utilizza DynamoDBSaveExpression tuttavia non sono in grado di specificare che la condizione è "hashkey AND rangekey" non può esistere. Il API specifica un metodo withConditionalOperator ma non riesco a vederlo nella mia classe. Sto usando l'ultimo aws java sdk anche da here.

Qualche suggerimento su come salvare in modo condizionale? O cosa potrei fare in modo errato?

risposta

18
DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression(); 
Map<String, ExpectedAttributeValue> expectedAttributes = 
    ImmutableMap.<String, ExpectedAttributeValue>builder() 
     .put("hashKey", new ExpectedAttributeValue(false)) 
     .put("rangeKey", new ExpectedAttributeValue(false)) 
     .build(); 
saveExpression.setExpected(expectedAttributes); 
saveExpression.setConditionalOperator(ConditionalOperator.AND); 
try { 
    dynamoDBMapper.save(objectToSave, saveExpression); 
} catch (ConditionalCheckFailedException e) { 
    //Handle conditional check 
} 

Questo utilizza il public ExpectedAttributeValue(Boolean exists) costruttore, che richiede solo internamente setExists.

+0

Grazie Mike. Mi sono reso conto che non ho sincronizzato il mio IDE con la build gradle e quindi l'ultimo SDK AWS non era disponibile nell'IDE. Una volta sincronizzato, il metodo setConditionalOperator è diventato disponibile. Grazie per la tua risposta. È corretto, quindi l'ho contrassegnato come tale. – n00b

+0

È necessario impostareConditionalOperator? Non è predefinito per convalidare tutte le condizioni? – iamprem

+1

Trovato! "Se ometti ConditionalOperator, allora AND è l'impostazione predefinita." da qui sotto la sezione operatore condizionale: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html – iamprem