Transaction request cannot include multiple operations on one item
TL;DR — Zwei Aktionen im selben TransactWriteItems-Request zielen auf dasselbe Item (denselben Primärschlüssel). DynamoDB verlangt, dass jedes Item in einer Transaktion eindeutig ist, und lehnt den gesamten Aufruf ab, bevor irgendetwas davon läuft. Fass die doppelten Aktionen zu einer zusammen, oder zieh eine davon in einen separaten Write.
Was es bedeutet
ValidationException: Transaction request cannot include multiple operations on one itemEin TransactWriteItems-Request gruppiert bis zu 100 Aktionen (Put, Update, Delete, ConditionCheck), die alle committen oder alle scheitern. Eine harte Regel dieser API ist, dass keine zwei Aktionen dasselbe Item adressieren dürfen — DynamoDB identifiziert ein Item über seinen vollständigen Primärschlüssel, und jeder Schlüssel darf höchstens einmal vorkommen. Das ist eine HTTP-400-ValidationException, die vor der Ausführung der Transaktion abgefangen wird, und sie ist so wie sie ist nicht wiederholbar.
Warum es passiert
- Ein
ConditionCheckplus ein Write auf demselben Schlüssel — du hast versucht, eine Bedingung auf einem Item zu behaupten und es zugleich in derselben Transaktion zuUpdate/Delete. Falte die Bedingung stattdessen in dieConditionExpressiondes Writes. - Zwei Writes auf denselben Schlüssel — z. B. ein
Putund einUpdatefür dasselbe Item, oft aus einer Schleife, die nicht nach Schlüssel dedupliziert. - Ein generierter Batch mit doppelten Schlüsseln — ein ORM oder eine Mapping-Schicht hat denselben Partition+Sort Key zweimal ausgegeben.
- Derselbe Schlüssel in zwei verschiedenen Aktionen über Tabellen, die du für verschieden hältst — das Item ist eindeutig
{table, PK, SK}; eine Wiederholung innerhalb derselben Tabelle löst es aus.
So behebst du es
- Dedupliziere nach Primärschlüssel, bevor du die Transaktion baust — jeder
{PK, SK}darf einmal vorkommen. - Merge einen
ConditionCheckin den Write, den er absichert: Setze die Behauptung in die eigeneConditionExpressiondieses Items, statt eine separateConditionCheck-Aktion hinzuzufügen. - Kombiniere zwei Mutationen zu einem
Updatemit einer einzigenUpdateExpression(SET/ADD/REMOVE) statt zwei Aktionen. - Teile unvermeidbare mehrstufige Logik auf separate Transaktionen oder Writes auf, wenn sich die Operationen wirklich nicht als eine Aktion ausdrücken lassen.
Multi-Item-Transaktionen von Hand zusammenzustellen ist der Ort, an dem sich doppelte Schlüssel einschleichen. Die DynoTable-Desktop-App zeigt jedes Item über seinen Primärschlüssel, sodass ein wiederholtes Ziel offensichtlich ist, bevor du den Request sendest.
Zuerst in DynoTable prüfen
Before building a multi-item transaction, list target keys in DynoTable — öffne die Tabelle mit ⌘K and confirm each primary key is unique in your action list. Staging (⌘S) lets you test a single-item transaction bevor du scale up.
Merge condition checks into writes using the Expression Builder. Wechsle Profile mit ⌘P; see Mit AWS verbinden and Installation.
Quellen
- TransactWriteItems — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
- Amazon DynamoDB Transactions: How it works (verifiziert 2026-07-13)
Verwandte Fehler
- TransactionCanceledException — die Transaktion wurde geparst, aber eine Bedingung oder ein Konflikt hat sie beim Commit abgebrochen.
- Too many items in a TransactWriteItems call — mehr als 100 Aktionen in einer Transaktion.
- ValidationException (Überblick)
- Code-Beispiel: TransactWriteItems in Node.js — eine gültige Multi-Item-Transaktion zum Anpassen.
- Learn: DynamoDB-Transaktionen
Referenzen
- TransactWriteItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.