使用@DynamoDBFlattened自动更新展平对象吗?

时间:2018-02-16 13:24:41

标签: java nosql amazon-dynamodb aws-java-sdk

我是NoSQL的新手。我正在查看aws-java-sdk-dynamodb,我发现这个注释@DynamoDBFlattened似乎压扁了一个内部复杂的对象类型。

让我们假设以下结构:

@DynamoDBTable(tableName = "Product")
public class Product {

    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    private String id;

    @DynamoDBFlattened
    private Supplier supplier;

}

@DynamoDBTable(tableName = "Supplier")
public class Supplier {

    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    private String id;

    private String name;

}

现在让我们假设我在供应商数据库中有以下供应商:

{
    "id": "1",
    "name": "Nick"
}

产品数据库中的以下产品:

{
    "id": "1",
    "supplier": { "id": "1", "name": "Nick" }
}

如果我将供应商数据库上的供应商更新为以下内容会发生什么:

{
    "id": "1",
    "name": "John"
}

产品注册表会发生什么? ID为1的产品是否会将其供应商名称自动更新为John?或者它留在尼克?

1 个答案:

答案 0 :(得分:1)

不,两个表中的数据之间没有关系。 @DynamoDBFlattened的目的是允许您在代码中使用复杂类型,这些类型一旦存储在DynamoDB表中就会展平为单个字段。

在具体情况下,不应该有Supplier表,因为数据存储在Product表中。它只能通过产品检索,除非您使用二级索引来获取供应商。