当具有属性子集的对象访问项目时,DynamoDB 返回的对象类型是什么?

What would be the type of the object returned by the DynamoDB when an object with subset of the attributes accesses an item?

我是 DynamoDB 的新手。我有这个疑问:

让我们考虑一个 DDB table 具有以下属性的项目:

现在我有以下2个Java 类:

class1:

package packageName;
import com.amazonaws.services.dynamodbv2.datamodeling.*;

@DynamoDBTable(tableName = class1.TABLE_NAME)
public class class1 {

    public static final String TABLE_NAME = "tableName";
    public static final String ATTR1 = "Attr1";
    public static final String ATTR2 = "Attr2";
    public static final String ATTR3 = "Attr3";

    @DynamoDBHashKey(attributeName = ATTR1)
    private String attr1;

    @DynamoDBRangeKey(attributeName = ATTR2)
    private String attr2;

    @DynamoDBAttribute(attributeName = ATTR3)
    private String attr3;
}

class2:

package packageName;
import com.amazonaws.services.dynamodbv2.datamodeling.*;

@DynamoDBTable(tableName = class2.TABLE_NAME)
public class class1 {

    public static final String TABLE_NAME = "tableName";
    public static final String ATTR1 = "Attr1";
    public static final String ATTR2 = "Attr2";

    @DynamoDBHashKey(attributeName = ATTR1)
    private String attr1;

    @DynamoDBRangeKey(attributeName = ATTR2)
    private String attr2;
}

当我使用这行代码时:

class2 class2Obj = mapper.load(class2Obj.class,attr1Val,attr2Val); // mapper is the DynamoDBMapper object.

映射器 return 是 class2 的对象吗?

如果不是,是否有任何其他方法使用映射器从 table 中获取项目作为 class2 对象?

P.S。我没有可用的 DDB 来检查这个。

是的,您可以加载项目属性的子集。

不过有一些限制:要加载项目,您需要使用分区键属性和排序键属性(如果 table 同时具有分区键和排序键)。如果您使用索引也是如此。

其次,虽然您可以加载具有部分属性的项目,但要小心更新。尝试保存以这种方式加载的项目可能会破坏未加载的属性(取决于您的保存方式)

最后,您可以创建一个本地二级索引 (LSI) or a Global Secondary Index (GSI) 并利用属性投影来优化您的查询。