首页 > 解决方案 > @DynamoDBAttribute 是否支持属性名称中的文档路径?

问题描述

我检查了 DynamoDB 文档,但找不到任何东西来确认或否认这是否允许。

对of使用文档路径是否有效,如此代码片段中所示?attributeName@DynamoDBAttribute

@DynamoDBDocument
public class MyClass {

    @DynamoDBAttribute(attributeName="object.nestedObject.myAttribute")
    private String myAttribute;
    .
    .
    .
    // Getters & Setters, etc
}

编辑:为了清楚起见,我特别想找出@DynamoDBAttributeJava注释中的文档路径是否有效,作为直接访问嵌套值的一种方式。我知道在指定查询时文档路径通常有效,但这个问题专门针对 DynamoDBMapper 注释。

标签: amazon-web-servicesamazon-dynamodb

解决方案


是的,属性名称可以有Dot它。但是,在我看来,不建议使用Dot属性名称。通常,Dot将用于在Map属性中导航树。

以下是 DynamoDB 的命名规则:

所有名称都必须使用 UTF-8 编码,并且区分大小写。

表名和索引名的长度必须在 3 到 255 个字符之间,并且只能包含以下字符:

阿兹

AZ

0-9

_(下划线)

  • (短跑)

. (点)

属性名称的长度必须介于 1 到 255 个字符之间。

访问地图元素:-

地图元素的取消引用运算符是 . (一个点)。使用点作为地图中元素之间的分隔符:

MyMap.nestedField

MyMap.nestedField.deeplyNestedField

我可以创建属性名称包含Dot的项目,并成功使用 FilterExpression 查询该项目。

它在所有语言的 AWS 开发工具包中的工作方式类似。只要将数据类型定义为字符串,它就会按预期工作。

一些 JS 示例:-

创建项目:-

var table = "Movies";
var year = 2017;
var title = "putitem data test 2";
var dotAttr = "object.nestedObject.myAttribute";        

var params = {
    TableName:table,
    Item:{
        "yearkey": year,
        "title": title,
        "object.nestedObject.myAttribute": "S123"
    },
    ReturnValues : 'NONE'
};

更新:-

它也适用于@DynamoDBAttribute注释。

private String dotAttr;
@DynamoDBAttribute(attributeName = "object.nestedObject.myAttribute")
    public String getDotAttr() {
        return dotAttr;
    }

推荐阅读