У меня есть следующие таблицы MS SQL DB, где я храню данные, относящиеся к школе:
HighSchools <--- GradeLevels <--- Courses <--- CourseGrades </em>
Отношения между таблицами выглядят так:
@Entity
@Table(name = "GradeLevels", schema = "dbo")
public class HighSchoolGradeLevel {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "AttendedId", nullable = false)
private HighSchoolAttended highSchoolAttended;
@OneToMany(mappedBy = "highSchoolGradeLevel")
@OrderBy("createdDate ASC")
private List<HighSchoolCourse> highSchoolCourses = new ArrayList<>(0);
// other fields and getter/setter methods....
}
@Entity
@Table(name = "Courses", schema = "dbo")
public class HighSchoolCourse {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "GradeLevelId", nullable = false)
private HighSchoolGradeLevel highSchoolGradeLevel;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "highSchoolCourse", cascade={CascadeType.REMOVE, CascadeType.PERSIST})
@OrderBy("createdDate ASC")
private List<HighSchoolCourseGrade> highSchoolCourseGrades = new ArrayList<>(0);
// other fields and getter/setter methods....
}
@Entity
@Table(name = "CourseGrades", schema = "dbo")
public class HighSchoolCourseGrade {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CourseId", nullable = false)
private HighSchoolCourse highSchoolCourse;
// other fields and getter/setter methods....
}
Пользователи веб-приложения java могут выполнять операции CRUD с данными таблиц.
Новое требование состоит в том, чтобы использовать данные с такой же структурой от третьей стороны. Использованные данные НЕ ДОЛЖНЫ отображаться для пользователей веб-приложения.
Поэтому я думаю использовать наследование JPA для одной таблицы, которое позволяет мне:
- избегать добавления клонов существующих таблиц
- избегать клонирования существующих бизнес-логи c, который соответствует существующим типам сущностей
- избегать рефакторинга кода существующих операций CRUD в случае реализации собственного столбца дискриминатора.
Наследование одной таблицы выглядит разумно для моего, но есть одна вещь, в которой я не уверен "Каков компромисс производительности при использовании наследования одной таблицы, особенно при работе на Родитель и его дочерние сущности? ". Вопрос может показаться пустым, зная тот факт, что Hibernate обновит SQL запросов соответствующими discriminator
операторами. Но все же было бы неплохо улучшить текущие знания и быть уверенным, что существующие пользователи wep-приложения не получат плохой опыт использования.
Существующий слой DAO веб-приложения использует Spring Data JPA. В настоящее время каждая из существующих таблиц содержит более ~ 500 тыс. Записей.