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 item

Una 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 ConditionCheck più una scrittura sulla stessa chiave: hai provato a imporre una condizione su un elemento e anche ad Aggiorna/Elimina nella stessa transazione. Piega invece la condizione nella ConditionExpression della 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

  1. Deduplicazione tramite chiave primaria prima di creare la transazione: ogni {PK, SK} può apparire una volta.
  2. Unisci un ConditionCheck nella scrittura che custodisce: inserisci l'asserzione nella ConditionExpression di quell'elemento invece di aggiungere un'azione ConditionCheck separata.
  3. Combina due mutazioni in un unico Update utilizzando una singola UpdateExpression (SET/ADD/REMOVE) invece di due azioni.
  4. Dividi la logica multi-fase inevitabile tra transazioni separate o scritture se le operazioni non possono realmente essere espresse come un'unica azione.
  5. 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

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.