Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 具有其他对象列表的对象的DynamoDB映射器注释_Amazon Web Services_Annotations_Amazon Dynamodb_Aws Sdk_Dynamodb Queries - Fatal编程技术网

Amazon web services 具有其他对象列表的对象的DynamoDB映射器注释

Amazon web services 具有其他对象列表的对象的DynamoDB映射器注释,amazon-web-services,annotations,amazon-dynamodb,aws-sdk,dynamodb-queries,Amazon Web Services,Annotations,Amazon Dynamodb,Aws Sdk,Dynamodb Queries,我正在尝试为下面的案例创建dynamoDBMapper注释 我有EmployeeLevelTrail,它是员工级别记录的一个类 @DynamoDBTable(tableName = TABLE_NAME) public class EmployeeData { public final static String TABLE_NAME = “EmployeeDataRecord”; @DynamoDBAttribute(attributeName = “employeeID”)

我正在尝试为下面的案例创建dynamoDBMapper注释

我有EmployeeLevelTrail,它是员工级别记录的一个类

@DynamoDBTable(tableName = TABLE_NAME)
public class EmployeeData {
    public final static String TABLE_NAME = “EmployeeDataRecord”;

    @DynamoDBAttribute(attributeName = “employeeID”)
    public String EmployeeID;

    @DynamoDBAttribute(attributeName = “EmployeeLevelDataRecords”)
    @DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
    public EmployeeLevelTrail employeeLevelTrail

}


public class EmployeeLevelTrail {

    public final static String DDB_ATTR_EMPLOYEE_LEVEL_TRAIL = “employeeLevelTrail”;

    @DynamoDBAttribute(attributeName = DDB_ATTR_EMPLOYEE_LEVEL_TRAIL)
    private List<EmployeeLevelRecord> thisEmployeeLevelRecords;

    public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord employeeLevelRecord) {

        thisEmployeeLevelRecords.add(employeeLevelRecord);

    }
}


public class EmployeeLevelRecord {

    private String Level;

    private String Manager;

    private Instant timeOfEvent;

}
@DynamoDBTable(表名=表名)
公共类雇员数据{
公共最终静态字符串表\u NAME=“EmployeeDataRecord”;
@DynamoDBAttribute(attributeName=“employeeID”)
公共字符串EmployeeID;
@DynamoDBAttribute(attributeName=“EmployeeLevelDataRecords”)
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
公共雇员水平跟踪雇员水平跟踪
}
公共类EmployeeLevelTrail{
公共最终静态字符串DDB_ATTR_EMPLOYEE_LEVEL_TRAIL=“employeeLevelTrail”;
@DynamoDBAttribute(attributeName=DDB\u ATTR\u EMPLOYEE\u LEVEL\u TRAIL)
私人列表此员工级别记录;
public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord EmployeeLevelRecord){
此EmployeeLevelRecords.add(employeeLevelRecord);
}
}
公共类EmployeeLevelRecord{
私有字符串级别;
私有字符串管理器;
私人即时事件时间;
}

这是我的注释,但它不正确,因为我无法保存我的DynamoDB数据

您需要使用
DynamoDBTypeConverted
注释。您还需要创建一个转换器类,该类定义如何从Java对象获取DynamoDB原语(可能是字符串)

您还可以从以下答案中查看一个示例:


要将另一个类标记为DynamoDBMapper数据模型的一部分,可以使用注释,这会告诉DynamoDBMapper类可以序列化为DynamoDB文档

对于您没有编写的类(即,从Java库或外部库),或者如果您需要更多地控制如何序列化您自己的类,您可以使用
@DynamoDBTypeConverted
,它允许您通过提供自己的实现将任何Java对象转换为任何受支持的DynamoDB类型

使用您的示例代码,我添加了相应的
@DynamoDBDocument
@DynamoDBTypeConverted
注释,以及
DynamoDBTypeConverter
的示例实现,该示例实现将
即时
转换为ISO-8601
字符串。如果
employeeId
是表的哈希键,请确保还将
@DynamoDBHashKey
注释添加到
employeeId

@DynamoDBTable(tableName = TABLE_NAME)
public class EmployeeData {
    public final static String TABLE_NAME = “EmployeeDataRecord”;

    @DynamoDBAttribute(attributeName = “employeeID”)
    public String EmployeeID;

    @DynamoDBAttribute(attributeName = “EmployeeLevelDataRecords”)
    public EmployeeLevelTrail employeeLevelTrail

}

@DynamoDBDocument
public class EmployeeLevelTrail {

    public final static String DDB_ATTR_EMPLOYEE_LEVEL_TRAIL = “employeeLevelTrail”;

    @DynamoDBAttribute(attributeName = DDB_ATTR_EMPLOYEE_LEVEL_TRAIL)
    private List<EmployeeLevelRecord> thisEmployeeLevelRecords;

    public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord employeeLevelRecord) {

        thisEmployeeLevelRecords.add(employeeLevelRecord);

    }
}

@DynamoDBDocument
public class EmployeeLevelRecord {

    private String Level;

    private String Manager;

    @DynamoDBTypeConverted(converter = InstantToStringTypeConverter.class)
    private Instant timeOfEvent;

}

public class InstantToStringTypeConverter implements DynamoDBTypeConverter<String, Instant> {

    @Override
    public String convert(final Instant instant) {
        return instant.toString();
    }

    @Override
    public Instant unconvert(final String string) {
        return Instant.parse(string);
    }
}
@DynamoDBTable(表名=表名)
公共类雇员数据{
公共最终静态字符串表\u NAME=“EmployeeDataRecord”;
@DynamoDBAttribute(attributeName=“employeeID”)
公共字符串EmployeeID;
@DynamoDBAttribute(attributeName=“EmployeeLevelDataRecords”)
公共雇员水平跟踪雇员水平跟踪
}
@动态文档
公共类EmployeeLevelTrail{
公共最终静态字符串DDB_ATTR_EMPLOYEE_LEVEL_TRAIL=“employeeLevelTrail”;
@DynamoDBAttribute(attributeName=DDB\u ATTR\u EMPLOYEE\u LEVEL\u TRAIL)
私人列表此员工级别记录;
public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord EmployeeLevelRecord){
此EmployeeLevelRecords.add(employeeLevelRecord);
}
}
@动态文档
公共类EmployeeLevelRecord{
私有字符串级别;
私有字符串管理器;
@DynamoDBTypeConverted(converter=InstantToStringTypeConverter.class)
私人即时事件时间;
}
公共类InstantToStringTypeConverter实现DynamoDBTypeConverter{
@凌驾
公共字符串转换(最终即时){
return instant.toString();
}
@凌驾
公共即时取消插入(最终字符串){
返回Instant.parse(字符串);
}
}

我使用下面的代码找到了解决方案。仅使用@DynamoDBTypeConvertedJSON,我就能够在表中创建一个条目,但无法更新它,因为我正在运行mapping Dynamo DB mapping exception

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = TABLE_NAME)
public class EmployeeData {

    public final static String TABLE_NAME = "EmployeeData";

    public final static String DDB_ATTR_ID = "Id";

    public final static String DDB_ATTR_EMPLOYEE_LEVEL_RECORD_TRAIL = "EmployeeLevelRecordTrail";

    @DynamoDBHashKey(attributeName = DDB_ATTR_ID)
    @DynamoDBAttribute(attributeName = DDB_ATTR_ID)
    private String id;

    @DynamoDBAttribute(attributeName = DDB_ATTR_EMPLOYEE_LEVEL_RECORD_TRAIL)
    @DynamoDBTypeConverted(converter = EmployeeLevelRecordTrailConverter.class)
    private  EmployeeLevelRecordTrail  employeeLevelRecordTrail;

    @DynamoDBAttribute(attributeName = DDB_ATTR_CREATED_TIME)
    @DynamoDBTypeConverted(converter = InstantConverter.class)
    private Instant joiningTime;
}



@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeLevelRecordTrail {

    private List<EmployeeLevelRecord> thisEmployeeLevelRecords;

    public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord employeeLevelRecord) {

        thisEmployeeLevelRecords.add(employeeLevelRecord);

    }
}


@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBDocument
public class EmployeeLevelRecord {

    private String Level;

    private String Manager;

    @DynamoDBTypeConverted(converter = InstantConverter.class)
    private Instant timeOfEvent;

}

public class EmployeeLevelRecordTrailConverter implements
        DynamoDBTypeConverter<List<EmployeeLevelRecord>, EmployeeLevelRecordTrail> {

    @Override
    public List<EmployeeLevelRecord> convert(EmployeeLevelRecordTrail employeeLevelRecordTrail) {
        return employeeLevelRecordTrail.getEmployeeLevelRecord();
    }

    @Override
    public EmployeeLevelRecordTrail unconvert(List<EmployeeLevelRecord> thisEmployeeLevelRecords) {
        return new EmployeeLevelRecordTrail(thisEmployeeLevelRecords);
    }
}

public class InstantConverter implements DynamoDBTypeConverter<String, Instant> {

    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_INSTANT;

    @Override
    public String convert(Instant instant) {
        return instant == null ? null : DATE_TIME_FORMATTER.format(instant);
    }

    @Override
    public Instant unconvert(String str) {
        return str == null ? null : Instant.from(DATE_TIME_FORMATTER.parse(str));
    }
}
@数据
@建筑商
@AllArgsConstructor
@诺尔格构装师
@DYNAMODB表格(表格名称=表格名称)
公共类雇员数据{
公共最终静态字符串表\u NAME=“EmployeeData”;
公共最终静态字符串DDB_ATTR_ID=“ID”;
公共最终静态字符串DDB_ATTR_EMPLOYEE_LEVEL_RECORD_TRAIL=“EmployeeLevelRecordTrail”;
@DynamoDBHashKey(attributeName=DDB\u ATTR\u ID)
@DynamoDBAttribute(attributeName=DDB\u ATTR\u ID)
私有字符串id;
@DynamoDBAttribute(attributeName=DDB\u ATTR\u EMPLOYEE\u LEVEL\u RECORD\u TRAIL)
@DYNAMODBtypeConverter(converter=EmployeeLevelRecordTrailConverter.class)
私人雇员级别记录跟踪雇员级别记录跟踪;
@DynamoDBAttribute(attributeName=DDB\u ATTR\u CREATED\u TIME)
@DynamoDBTypeConverted(转换器=InstantConverter.class)
私人即时连接时间;
}
@资料
@建筑商
@AllArgsConstructor
@诺尔格构装师
公共类EmployeeLevelRecordTrail{
私人列表此员工级别记录;
public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord EmployeeLevelRecord){
此EmployeeLevelRecords.add(employeeLevelRecord);
}
}
@资料
@建筑商
@AllArgsConstructor
@诺尔格构装师
@动态文档
公共类EmployeeLevelRecord{
私有字符串级别;
私有字符串管理器;
@DynamoDBTypeConverted(转换器=InstantConverter.class)
私人即时事件时间;
}
公共类EmployeeLevelRecordTrailConverter实现
发电机式变频器{
@凌驾
公共列表转换(EmployeeLevelRecordTrail EmployeeLevelRecordTrail){
返回employeeLevelRecordTrail.getEmployeeLevelRecord();
}
@凌驾
公共EmployeeLevelRecordTrail Unsert(列出此EmployeeLevelRecords){
返回新的EmployeeLevelRecordTrail(此EmployeeLevelRecords);
}
}
公共类InstantConverter实现DynamoDBTypeConverter{
私有静态最终日期timeformatter DATE\u TIME\u FORMATTER=DateTimeFormatter.I