@DynamoDBAttribute是否在属性名称中支持文档路径?

时间:2018-10-04 20:35:13

标签: amazon-web-services amazon-dynamodb

我已经检查了DynamoDB文档,但找不到任何要确认或否认是否允许这样做的东西。

在此代码段中,Document PathattributeName使用@DynamoDBAttribute是否有效?

@DynamoDBDocument
public class MyClass {

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

编辑:为了清楚起见,我专门尝试在Java批注@DynamoDBAttribute中查找文档路径是否有效,以此作为直接访问嵌套值的方法。我知道在指定查询时文档路径通常可以正常工作,但是这个问题专门与DynamoDBMapper注释有关。

2 个答案:

答案 0 :(得分:0)

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

  

以下是DynamoDB的命名规则:

     

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

     

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

     

a-z

     

A-Z

     

0-9

     

_(下划线)

     
      
  • (破折号)
  •   
     

。 (点)

     

属性名称必须在1到255个字符之间。

访问地图元素:-

  

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

     

MyMap.nestedField

     

MyMap.nestedField.deeplyNestedField

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

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

一些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;
    }

答案 1 :(得分:0)

使用@DynamoDBAttribute中的属性名称无法引用嵌套路径。我需要使用带有添加的@DynamoDBDocument注释的POJO类型来表示嵌套的每个级别。