Reputation: 1559
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
Reputation: 1559
Put this annotation on superclass:
@DynamoDBDocument
public abstract class Animal{
//...
}
Upvotes: 9