DynamoDB继承没有映射父哈希

Acc*_*ivo 2 java amazon-web-services amazon-dynamodb

我有3节课:

public abstract class Animal{
    private String id;
    private String name;

    @DynamoDBHashKey(attributeName = "Id")
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @DynamoDBAttribute(attributeName = "Name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是一类猫:

@DynamoDBTable(tableName = "Cat")
public class Cat extends Animal{
    private String purr;
    @DynamoDBAttribute(attributeName = "Purr")
    public String getPurr() {
        return purr;
    }
    public void setPurr(String purr) {
        this.purr = purr;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个类似的类Dog,它扩展Animal并使用了另一个称为Dog的表:@DynamoDBTable(tableName = "Dog")

问题是当我尝试保存时Cat,出现错误:

Cat: does not map HASH key on model
Run Code Online (Sandbox Code Playgroud)

但是Cat应该具有他超类的哈希键。

我可以解决将注解:@DynamoDBTable(tableName = "Cat")从类Cat移到超类,它可以保存Cat。我仍然没有测试这是否会导致问题Dog,但我认为不是,因为它将被覆盖。 @DynamoDBTable(tableName = "Dog")

但是这种解决方案对我来说似乎很难看。有更好的解决方案吗?(我会考虑将“狗”和“猫”这两个表合并为一个仅称为“动物”的表。)

Acc*_*ivo 5

将此注释放在超类上:

@DynamoDBDocument
public abstract class Animal{
//...
}
Run Code Online (Sandbox Code Playgroud)