Как правильно аннотировать абстрактные классы, наследующие друг друга, с помощью JPA? - PullRequest
0 голосов
/ 27 мая 2020

Я новичок в JPA, так что, может быть, кто-нибудь объяснит мне, как правильно аннотировать абстрактные классы с помощью JPA? У меня есть абстрактный класс с сгенерированным полем идентификатора:

public abstract class AbstractClass implements Serializable {
    private static final long serialVersionUID = 1L;
    private long id;

    @Id
    @GeneratedValue
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

и абстрактный класс с именем, которое расширяет AbstractClass:

public abstract class AbstractNameClass extends AbstractClass {
    private String shortName;

    @Column(name = "shortName", nullable = false)
    public String getShortName() {
        return shortName;
    }

    public void setShortName(String shortName) {
        this.shortName = shortName;
    }
}

У меня есть два типа классов, один расширяет AbstractClass и другие classes extends AbstractNameClass:

@Entity
public class Model extends AbstractNameClass {
    // this class should inherit id (from AbstractClass) and shortName (from AbstractNameClass)
}

и

@Entity
public class Vehicle extends AbstractClass {
    // this class should inherit only id
}

Если я добавлю аннотацию @MappedSuperclass в AbstractClass, я смогу создавать и сохранять объекты, которые расширяют AbstractClass, но как аннотировать AbstractNameClass? Я попытался добавить аннотацию @Entity, но получил ошибку «Не указан идентификатор для объекта», также я попытался добавить аннотацию @MappedSuperclass и тоже получил ту же ошибку. Итак, мой вопрос: как правильно аннотировать абстрактные классы с помощью JPA без создания таблиц AbstractClass и AbstractNameClass (в моем db я хочу иметь только таблицы Model и Vehicle)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...