我得到了这个代码
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);
}
看起来这是预期的行为,因为我更新的值/属性(trackPosition)也是排序键,这意味着它必须是唯一的;