首页 > 解决方案 > DynamoDB 错误插入映射

问题描述

我正在尝试在 AWS DynamoDB 中插入,我得到了插入寄存器,但在 Java (Eclipse) 中出现错误当我插入但重复时,我在 DynamoDB 中看到我的插入表。

我得到错误->

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Aricle[ID_TABLE]: null or empty value for primary key
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvert(DynamoDBMapperFieldModel.java:171)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$ValueUpdate.apply(DynamoDBMapper.java:1440)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:746)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:622)
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:113)
    at org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.save(DynamoDBTemplate.java:136)
    at org.socialsignin.spring.data.dynamodb.repository.support.SimpleDynamoDBCrudRepository.save(SimpleDynamoDBCrudRepository.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

我的类Java

@DynamoDBTable(tableName = "ARTICLE")
public class Article{

    @Id
    private String ID_TABLE;

    private String description;

public Article() {
    }

public Article(String description) {
     this.description=description;
    }

@DynamoDBHashKey(attributeName = "ID_TABLE")
    @DynamoDBAutoGeneratedKey
    public String getID_TABLE() {
        return ID_TABLE;
    }

@DynamoDBAttribute(attributeName = "Description")
    public String getDescription() {
        return description;
    }
}

我用主键的空值或空值上传这个,但我得到@DynamoDBAutoGeneratedKey......

我用 Angular 发送对象文章:

export class Article{
    id: string;
    description: string;
}

  let newParam: Article= {
            id: '', 
            description: 'chair' 
    };

然后我现在明白我如何发送 '' , @DynamoDBAutoGeneratedKey不会运行,因为我尝试过

let newParam: Article= {
                id: null, 

我得到错误 null

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: null (Service: AmazonDynamoDBv2; Status Code: 407; Error Code: null; Request ID: null)

然后,如果我从 Angular 向 SpringBoot 发送了一个对象,并且 Angular 需要声明 id 这个对象,并且 Springboot 的对象获取了这个对象,我如何生成密钥?

使用新数据进行编辑。

我得到对象

控制器:

@RequestMapping(method = RequestMethod.POST, value = "/addParam", produces = MediaType.APPLICATION_JSON_VALUE)
    public MyMessage addParam(@RequestBody Article article) {
         try {
            pgRepository.save(article);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
}

存储库:

public interface Article Repository extends CrudRepository<Article , String> {
}

标签: javaamazon-dynamodb

解决方案


添加 @DynamoDBAutoGeneratedKey 注释后,哈希键或范围键属性将自动生成。对象持久性模型将在保存这些属性时生成随机 UUID。只有字符串属性可以标记为自动生成的键。

在您调用 save 方法将其保存在数据库中之前,此键将为空。当您调用 save 时,API 将生成一个 UUID 并保存在数据库中,并将其设置到您的对象中。

代码片段将是:

public static void saveItem() {
   Article obj = new Article();
   obj.setDescription("abc123");
   // ID_TABLE field is null at this point      
   DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
   mapper.save(obj);
   // ID_TABLE field will have a value at this point 
   System.out.println("Object was saved with id " + obj.getID_TABLE());

}

我希望这有帮助。


推荐阅读