La solicitud de transacción no puede incluir múltiples operaciones en un artículo

TL;DR: dos acciones en la misma TransactWriteItems solicitud tienen como objetivo el mismo elemento (la misma clave principal). DynamoDB requiere que cada elemento de una transacción sea único, por lo que rechaza toda la llamada antes de ejecutar cualquiera de ellas. Contraiga las acciones duplicadas en una o mueva una de ellas a una escritura separada.

Qué significa

ValidationException: Transaction request cannot include multiple operations on one item

Una petición TransactWriteItems agrupa hasta 100 acciones (Put, Update, Delete, ConditionCheck) que se confirman todas o fallan todas. Una regla estricta de esa API es que ninguna acción puede apuntar al mismo Item — DynamoDB identifica un Item por su clave primaria completa, y cada clave puede aparecer como máximo una vez. Es un ValidationException HTTP 400, detectado antes de que la transacción se ejecute, y no es reintentable tal cual.

Por qué ocurre

  • Un ConditionCheck más una escritura sobre la misma clave — intentaste afirmar una condición sobre un Item y también hacerle un Update/Delete en la misma transacción. En su lugar, incorpora la condición al ConditionExpression de la escritura.
  • Dos escrituras a la misma clave — p. ej. un Put y un Update para el mismo Item, a menudo de un bucle que no deduplica por clave.
  • Un lote generado con claves duplicadas — un ORM o capa de mapeo emitió la misma clave de partición+ordenación dos veces.
  • La misma clave en dos acciones diferentes entre tablas que crees diferentes — el Item se identifica únicamente por {tabla, PK, SK}; una repetición dentro de la misma tabla lo dispara.

Cómo solucionarlo

  1. Deduplica por clave primaria antes de construir la transacción — cada {PK, SK} puede aparecer una vez.
  2. Fusiona un ConditionCheck en la escritura que protege: pon la afirmación en el propio ConditionExpression de ese Item en lugar de añadir una acción ConditionCheck separada.
  3. Combina dos mutaciones en un solo Update usando un único UpdateExpression (SET/ADD/REMOVE) en lugar de dos acciones.
  4. Divide la lógica multipaso inevitable en transacciones o escrituras separadas si las operaciones realmente no se pueden expresar como una sola acción.
  5. Registra las claves primarias de tu array TransactItems. Las claves duplicadas son fáciles de pasar por alto en lotes generados — imprime cada {PK, SK} antes de enviar.

Revisa primero en DynoTable

Antes de construir una transacción multi-Item, lista las claves de destino en DynoTable — abre la tabla con ⌘K y confirma que cada clave primaria es única en tu lista de acciones. El modo de preparación (⌘S) te deja probar una transacción de un solo Item antes de escalar.

Fusiona las comprobaciones de condición en las escrituras con el Expression Builder. Cambia de perfil con ⌘P; consulta Conectar a AWS e Instalar.

Fuentes

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.