我已经检查了DynamoDB文档,但找不到任何要确认或否认是否允许这样做的东西。
在此代码段中,Document Path的attributeName
使用@DynamoDBAttribute
是否有效?
@DynamoDBDocument
public class MyClass {
@DynamoDBAttribute(attributeName="object.nestedObject.myAttribute")
private String myAttribute;
.
.
.
// Getters & Setters, etc
}
编辑:为了清楚起见,我专门尝试在Java批注@DynamoDBAttribute
中查找文档路径是否有效,以此作为直接访问嵌套值的方法。我知道在指定查询时文档路径通常可以正常工作,但是这个问题专门与DynamoDBMapper注释有关。
答案 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类型来表示嵌套的每个级别。