代码之家  ›  专栏  ›  技术社区  ›  Sunny

按dynamoDb表的Id(哈希键)检索数据时出错

  •  0
  • Sunny  · 技术社区  · 6 年前

    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;
        }
    

    调用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表格详细信息:-

    enter image description here

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  1
  •   Alberto Martin    6 年前

    Name 作为分区密钥。但是,在代码中,您试图通过属性加载项 Id .

    这是不可能的,因为DynamoDB只允许您通过其主键加载项,在您的情况下,主键只是分区键(属性) 名称 ).

    身份证件 作为分区键,或创建一个辅助全局索引来实现: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html