Избегайте дополнительных таблиц абстрактного класса JPA - PullRequest
0 голосов
/ 25 октября 2018

Я использую JPA JOINED стратегию наследования с 3 абстрактными классами и 2 конкретными.Вот так (код сокращен для примера):

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class Employee {
    @Id
    private Long id;

    private String firstName;
    private String secondName;
}

@Entity
abstract class ProjectManager extends Employee {
    @OneToMany(mappedBy="manager")
    private List<Developer> developers;
}


@Entity
abstract class Developer extends Employee {
    @ManyToOne
    @JoinColumn(name="project_manager_id")
    private ProjectManager manager;
}

@Entity
class JavaProjectManager extends ProjectManager {
    private String someCustomProperty;
}

@Entity
class JavaDeveloper extends Developer {
    private String skill;
}

Таким образом, JPA создает 5 таблиц.Но одна из этих таблиц, абстрактная ProjectManager , пуста.Я имею в виду, что таблица ProjectManager имеет только столбец идентификатора из-за стратегии наследования.

Мой вопрос: как мне избежать этой дополнительной таблицы для абстрактного класса ProjectManager, сохраняя ту же иерархию классов?

Iне удалось удалить @Entity в классе ProjectManager, потому что мне все еще нужны двунаправленные отношения с классом разработчика.

Редактировать:

Кроме того, я не хочу перемещать разработчиков OneToMany из ProjectManager в JavaProjectManager, потому что у меня естьбольше классов, которые выходят из ProjectManager и нуждаются в разработчиках.

1 Ответ

0 голосов
/ 26 октября 2018

InheritanceType.TABLE_PER_CLASS делает именно то, что вам нужно.

Этот тип создает / использует таблицы только для неабстрактных таблиц.

Подробнее о различных типах здесь:

https://www.thoughts -on-java.org / полная-гид-наследственная-стратегия-JPA-спящий режим /

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