Наследование DynamoDB без хэширования родительского хэша - PullRequest
0 голосов
/ 29 августа 2018

у меня 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;
    }
}

Тогда класс 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;
    }
}

И подобный класс Dog, который расширяет Animal и использует другую таблицу с именем Dog : @DynamoDBTable(tableName = "Dog")

Проблема в том, что когда я пытаюсь сохранить Cat, я получаю сообщение об ошибке:

Cat: does not map HASH key on model

Но Cat должен иметь хеш-ключ своего суперкласса.

Я могу решить, переместив аннотацию: @DynamoDBTable(tableName = "Cat") из класса Cat в суперкласс, он работает для сохранения Cat. Я до сих пор не проверял, не вызовет ли это проблему на Dog, но я так не думаю, потому что она будет перезаписана на @DynamoDBTable(tableName = "Dog")

Но это решение кажется мне безобразным. Есть ли лучшее решение? (Я хотел бы объединить обе таблицы Dog и Cat в одну таблицу с именем Animal.)

1 Ответ

0 голосов
/ 30 августа 2018

Поместите эту аннотацию на суперкласс:

@DynamoDBDocument
public abstract class Animal{
//...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...