Erro durante a recuperação de dados por Id (HashKey) de uma tabela DynamoDB

ensolarado:

Eu estou tentando buscar os dados da minha mesa DynamoDB com base na identificação (HashKey).

Association.java

@DynamoDBTable(tableName = "Association")
public class Association {

    private String id;
    private String name;
    private String adminName;
    private String email;
    private String url;
    private String contactNumber;
    private String password;

    public Association() { }

    public Association(String name, String adminName, String email, String url,
                       String contactNumber, String password) {
        this.name = name;
        this.adminName = adminName;
        this.email = email;
        this.url = url;
        this.contactNumber = contactNumber;
        this.password = password;
    }

    public Association(String id, String name, String adminName, String email, String url,
                       String contactNumber, String password) {
        this.id = id;
        this.name = name;
        this.adminName = adminName;
        this.email = email;
        this.url = url;
        this.contactNumber = contactNumber;
        this.password = password;
    }

    @DynamoDBHashKey(attributeName = "Id")
    @DynamoDBAutoGeneratedKey
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @DynamoDBAttribute(attributeName="Name")
    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    @DynamoDBAttribute(attributeName="AdminName")
    public String getAdminName() { return adminName; }

    public void setAdminName(String adminName) { this.adminName = adminName; }

    @DynamoDBAttribute(attributeName="Email")
    public String getEmail() { return email; }

    public void setEmail(String email) { this.email = email; }

    @DynamoDBAttribute(attributeName="Url")
    public String getUrl() { return url; }

    public void setUrl(String url) { this.url = url; }

    @DynamoDBAttribute(attributeName="ContactNumber")
    public String getContactNumber() { return contactNumber; }

    public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; }

    @DynamoDBAttribute(attributeName="Password")
    public String getPassword() { return password; }

    public void setPassword(String password) { this.password = password; }

}

AssociationRepository.java:-

private AmazonDynamoDBClient getDynamoDBClient(){
        AmazonDynamoDBClient client = new AmazonDynamoDBClient();
        client.setRegion(Region.getRegion(REGION));
        client.setEndpoint(EndPoint);
        return client;
    }

public Association fetchById(String id) {
        DynamoDBConfig dynamoDBConfig = new DynamoDBConfig();
        DynamoDBMapper mapper = new DynamoDBMapper(getDBClient());
        Association association = new Association();
        association.setId(id);
        Association scanResult = null;
        try {
            scanResult = mapper.load(association);
        }
        catch (Exception exception){
            throw exception;
        }
        return scanResult;
    }

Invocação fetchById ( "123"). Onde "123" é um ID existente da tabela Ela lança o abaixo de erro para mim: -

{
  "errorMessage": "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: IT6U9BJ0RAJUDPMLGGR67C542VVV4KQNSO5AEMVJF66Q9ASUAAJG)",
  "errorType": "com.amazonaws.AmazonServiceException",
  "stackTrace": [
    "com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1305)",
    "com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:852)",

DynamoDB tabela Detalhes: -

digite descrição da imagem aqui

digite descrição da imagem aqui

Tenho pesquisado os AWS docs para isso, mas não conseguia encontrar qualquer solução que corrige this.Does qualquer um de vocês já enfrentou esse problema?

Alberto Martin:

Se você perceber, você definiu Namecomo sua chave de partição. No entanto, em código, você está tentando carregar um item pelo atributo Id.

Isso não é possível, como DynamoDB só lhe permite carregar um item de sua chave primária, que no seu caso é apenas a chave de partição (o atributo Name).

Então você tem que modificar tanto a mesa para jogo Idcomo chave de partição, ou criar um índice global secundária para conseguir isso: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=365269&siteId=1
Recomendado
Clasificación