UpdateItem dynamodb 操作导致表中条目重复

问题描述 投票:0回答:1

我得到了这个代码

public void saveOrUpdateImageRecords(String documentId, List<ImageDetail> imageDetails, LambdaLogger logger) {
    DynamoDbTable<ImageDetail> table = enhancedClient.table(System.getenv("COLUMBIA_IMAGES_TABLE"), TableSchema.fromBean(ImageDetail.class));
    logger.log("inside saveOrUpdateImageRecords");
    for (int i = 0; i < imageDetails.size(); i++) {
        ImageDetail imageDetail = imageDetails.get(i);
        // Set DocumentId and TrackPosition as they are your keys.
        logger.log("image detail " + i);
        logger.log(imageDetail.toString());
        try {
            // Check if the record already exists
            ImageDetail itemToCheck = table.getItem(Key.builder()
                    .partitionValue(documentId)
                    .sortValue(i)
                    .build());
            if (itemToCheck != null) {
                // Update the existing record
                logger.log("update");
                table.updateItem(imageDetail);
            } else {
                // Put a new item if it doesn't exist
                logger.log("new item");
                table.putItem(imageDetail);
            }
            logger.log("Operation succeeded for image: " );
            logger.log(imageDetail.toString());
        } catch (DynamoDbException e) {
            logger.log("Unable to process image: " + imageDetail.toString());
            logger.log(e.getMessage());
            // Handle the exception based on your use case
        }
    }
}

还有一个测试用例,其中 imageDetails:List 有一个条目。此条目对应于 dynamodb 表中已存在的映像。结果, 执行该方法的更新子句:

    if (itemToCheck != null) {
        // Update the existing record
        logger.log("update");
        table.updateItem(imageDetail);
    }

但是在dynamodb表中,条目是重复的。 任何人都可以请指出我为什么会发生这种情况吗?

java amazon-web-services amazon-dynamodb aws-sdk
1个回答
0
投票

看起来这是预期的行为,因为我更新的值/属性(trackPosition)也是排序键,这意味着它必须是唯一的;

© www.soinside.com 2019 - 2024. All rights reserved.