Я пытаюсь использовать DynamoDB для его функции без схемы и пытаюсь соответствовать модели данных, как показано ниже.В этом случае я пытаюсь перегрузить первичные ключи таблицы, чтобы поместить аналогичные данные в одну таблицу.
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
@Getter(AccessLevel.PUBLIC)
@Setter(AccessLevel.PROTECTED)
@ToString
@SuperBuilder
@DynamoDBTable(tableName = "POC")
public class ParentModel {
@DynamoDBHashKey(attributeName = "partitionKey")
private String partitionKey;
@DynamoDBRangeKey(attributeName = "sortKey")
private String sortKey;
@Getter
@Setter
@ToString
@SuperBuilder
@DynamoDBTable(tableName = "POC")
public static class ChildModelOne extends ParentModel {
@DynamoDBAttribute(attributeName = "fieldOne")
private String fieldOne;
@DynamoDBAttribute(attributeName = "fieldTwo")
private String fieldTwo;
}
@Getter
@Setter
@ToString
@SuperBuilder
@DynamoDBTable(tableName = "POC")
public static class ChildModelTwo extends ParentModel {
@DynamoDBAttribute(attributeName = "fieldThree")
private String fieldThree;
@DynamoDBAttribute(attributeName = "fieldFour")
private DocuModel fieldFour;
@Getter
@Setter
@ToString
@SuperBuilder
@DynamoDBDocument
public static class DocuModel {
@DynamoDBAttribute(attributeName = "fieldFive")
private String fieldFive;
@DynamoDBAttribute(attributeName = "fieldSix")
private String fieldSix;
}
}
}
Однако DynamoDBMapper
вызывает исключение Mapping следующим образом;com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: ChildModelOne; no mapping for HASH key
.
Поддерживает ли DynamoDB наследование модели описанным выше способом?Если да, то где я ошибаюсь?