Al escribir una aplicación Java de DynamoDB, puede recibir el error "sin asignación para la clave HASH" al escribir o recuperar datos de una tabla si la tabla y su modelo de datos no están configurados correctamente. La excepción completa sería similar a:
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: <YourClassNameHere>; no mapping for HASH key
Asegúrese de que los captadores de su clase mapeada anotada se declaren public
.
Dos cosas útiles para comprobar aquí:
1) Para su setter principal para su valor de clave hash, asegúrese de que la notación @DynamoDBHashKey
esté configurada correctamente. @DynamoDBAttribute
NO es el correcto para usar para la clave hash principal de su tabla y tampoco lo es @DynamoDBIndexHashKey
.
2) Asegúrese de que la clave hash esté definida en la definición de la tabla:
CreateTableRequest createTableRequest = new CreateTableRequest() .withTableName("testtable") .withKeySchema( new KeySchemaElement("id", KeyType.HASH) ) .withProvisionedThroughput(new ProvisionedThroughput(1L, 1L)) .withAttributeDefinitions( new AttributeDefinition("id", "S") ); CreateTableResult result = amazonDynamoDB.createTable(createTableRequest);
La definición de tabla anterior crea una tabla 'testtable' con un índice principal o una variable de clave hash titulada id
y el tipo es S
para cadena.
Además, si usa la herencia, asegúrese de no tener dos funciones con el mismo nombre que se anulen entre sí. Dynamo utilizará el captador de nivel superior y esto puede causar problemas.
Si está utilizando la anotación @Data (lombok.data), intente nuevamente después de eliminarla y genere captadores y definidores para todos los atributos (incluida la clave_principal/clave_partición).