J'ai un DynamoDB et voudrais essayer de mettre à jour certaines entrées et d'insérer celles qui n'existent pas. Mon apparence actuelle de code comme ceci:DynamoDB-Java écriture si existe mise à jour sinon
updateItemSpec = new UpdateItemSpec()
.withPrimaryKey(ITable.ID,
request.getID().getValue())
.withUpdateExpression(updatedExpressionSetString)
.withNameMap(nameMap)
.withValueMap(valueMap)
try {
table.updateItem(updateItemSpec);
}
Lorsque le updateExpression est:
SET supply.#var0 =
if_not_exists(supply.#var0,:default) + :val0,
date = :dateVal
Tout cela fonctionne très bien jusqu'à ce qu'une atteindre une entrée où la clé primaire n'existe pas déjà. Lorsque cela se produit ce code lance l'exception:
Le chemin du document fourni dans l'expression de mise à jour est valide pour la mise à jour (Service: AmazonDynamoDBv2; Code d'état: 400; Code d'erreur: ValidationException;)
Ma question est la suivante: Comment est-ce que je corrige ce code pour qu'il insère quand il atteint une clé primaire, mise à jour quand il atteint une clé primaire qui existe déjà sans avoir besoin d'une lecture supplémentaire pour vérifier si elle existe au préalable?
avez-vous essayé d'exécuter ceci avec une table qui n'a pas de clé primaire? – efekctive
Eh bien, la table est vide par défaut, mais j'ai toujours besoin de garder la clé primaire ou sinon je n'ai pas de clé null pour GetItem, DeleteItem, ou UpdateItem error_ – MatthewO
Je veux dire essayer d'isoler le problème. Essayez une mise à jour simple si cela fonctionne alors vous savez que le problème est le si existe. Je n'ai pas accès à mon environnement java maintenant – efekctive