La richiesta di transazione non può includere più operazioni su un articolo
TL;DR — Due azioni nella stessa richiesta "TransactWriteItems" hanno come target lo stesso elemento (stessa chiave primaria). DynamoDB richiede che ogni elemento in una transazione sia univoco, quindi rifiuta l'intera chiamata prima di eseguirla. Comprimi le azioni duplicate in una sola o spostane una in una scrittura separata.
Cosa significa
ValidationException: Transaction request cannot include multiple operations on one itemUna richiesta "TransactWriteItems" raggruppa fino a 100 azioni ("Put", "Update", "Delete", "ConditionCheck") che vengono tutte confermate o tutte falliscono. Una regola rigida di questo API è che non esistono due azioni che possano avere come target lo stesso oggetto — DynamoDB identifica un oggetto tramite la sua chiave primaria completa e ciascuna chiave può apparire al massimo una volta. Si tratta di una ValidationException HTTP 400, rilevata prima dell'esecuzione della transazione e non è riproducibile così com'è.
Perché succede
- Un
ConditionCheckpiù una scrittura sulla stessa chiave: hai provato a imporre una condizione su un elemento e anche adAggiorna/Eliminanella stessa transazione. Piega invece la condizione nellaConditionExpressiondella scrittura. - Due scritture sulla stessa chiave — ad es. un "Put" e un "Update" per lo stesso elemento, spesso da un ciclo che non esegue la deduplicazione tramite chiave.
- Un batch generato con chiavi duplicate: un ORM o un livello di mappatura ha emesso la stessa chiave di partizione+ordinamento due volte.
- Stessa chiave in due azioni diverse su tabelle che pensi siano diverse — l'elemento è univocamente
{table, PK, SK}; una ripetizione all'interno della stessa tabella lo attiva.
Come risolverlo
- Deduplicazione tramite chiave primaria prima di creare la transazione: ogni
{PK, SK}può apparire una volta. - Unisci un
ConditionChecknella scrittura che custodisce: inserisci l'asserzione nellaConditionExpressiondi quell'elemento invece di aggiungere un'azioneConditionCheckseparata. - Combina due mutazioni in un unico
Updateutilizzando una singolaUpdateExpression(SET/ADD/REMOVE) invece di due azioni. - Dividi la logica multi-fase inevitabile tra transazioni separate o scritture se le operazioni non possono realmente essere espresse come un'unica azione.
- Registra le chiavi primarie nell'array
TransactItems. È facile che le chiavi duplicate non vengano rilevate nei batch generati: stampa ogni{PK, SK}prima dell'invio.
Controlla prima in DynoTable
Prima di creare una transazione multi-elemento, elenca le chiavi di destinazione in DynoTable: apri la tabella con ⌘K e conferma che ciascuna chiave primaria è univoca nell'elenco delle azioni. La gestione temporanea (⌘S) ti consente di testare una transazione a articolo singolo prima di aumentarla.
Unisci i controlli delle condizioni nelle scritture utilizzando il Generatore di espressioni. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.
Fonti
- TransactWriteItems - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Transazioni Amazon DynamoDB: come funziona (verificato il 13-07-2026)
Errori correlati
- TransactionCanceledException: la transazione è stata analizzata ma una condizione o un conflitto l'ha annullata al momento del commit.
- Troppi elementi in una chiamata TransactWriteItems: più di 100 azioni in una transazione.
- ValidationException (panoramica)
- Esempio di codice: TransactWriteItems in Node.js — una transazione multielemento valida da adattare.
- Impara: DynamoDB transazioni
Riferimenti
- Riferimento TransactWriteItems - Amazon DynamoDB API
- Transazioni Amazon DynamoDB: come funziona - Guida per sviluppatori Amazon DynamoDB
- Gestione degli errori con DynamoDB — Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.