簡體   English   中英

通過 dynamoDb 表的 Id(hashKey) 檢索數據時出錯

[英]Error while retrieving data by Id(hashKey) of a dynamoDb table

我正在嘗試根據 Id(HashKey) 從我的 DynamoDB 表中獲取數據。

協會.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;
    }

調用 fetchById("123")。 其中“123”是表的現有 Id 它向我拋出以下錯誤:-

{
  "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 表詳細信息:-

在此處輸入圖片說明

在此處輸入圖片說明

我已經為此搜索了 AWS 文檔,但找不到任何解決此問題的解決方案。你們中有人遇到過這個問題嗎?

如果您意識到了,您將Name定義為您的分區鍵。 但是,在代碼中,您嘗試通過屬性Id加載項目。

這是不可能的,因為 DynamoDB 只允許您通過其主鍵加載項目,在您的情況下只是分區鍵(屬性Name )。

因此,您必須修改表以將Id設置為分區鍵,或者創建一個二級全局索引來實現: https : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM