Accollativo
Accollativo

Reputation: 1559

DynamoDB inheritance no mapping parent hash

I have 3 class:

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

Then a class Cat:

@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;
    }
}

And a similar class Dog that extends Animal and use another table called Dog: @DynamoDBTable(tableName = "Dog")

The problem is that when I try to save a Cat, I get the error:

Cat: does not map HASH key on model

But Cat should have the hash key of his superclass.

I can solve moving the annotation: @DynamoDBTable(tableName = "Cat") from the class Cat to the superclass, it works to save Cat. I still have not tested if this will cause problem to Dog, but I don't think so, because it will be overwrited by @DynamoDBTable(tableName = "Dog")

But this solution seem ugly to me. Is there a nicer solution? (I would consider to merge both the tables Dog and Cat to just one table called Animal.)

Upvotes: 3

Views: 2897

Answers (1)

Accollativo
Accollativo

Reputation: 1559

Put this annotation on superclass:

@DynamoDBDocument
public abstract class Animal{
//...
}

Upvotes: 9

Related Questions