У меня есть один суперкласс JPA и десятки подклассов.Большинство из этих подклассов не добавляют определенные свойства.
При использовании InheritanceType.JOINED
JPA предполагает использование подстали для каждого подкласса, что приводит к большому количеству устаревших таблиц базы данных, что усложняет администрирование базы данных и запросы.
Мой суперкласс в настоящее время выглядит следующим образом:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type")
public abstract class Employee {
@Id public int id;
public String firstName;
public String lastName;
public Date birthday;
}
Некоторые подклассы имеют определенные поля:
@Entity
public class ProjectManager extends Employee {
public String project;
}
Однако большинство подклассов пусто:
@Entity
public class Director extends Employee {
}
@Entity
public class FacilityManager extends Employee {
}
Эти таблицы базы данных имеют смысл:
employee(id, first_name, last_name, birthday)
project_manager(id, project)
Как можно избежать этих устаревших таблиц?
director(id)
facility_manager(id)
Если я просто не создаю их, проверка JPA завершается неудачно:
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:954) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
...
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [director]
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:67) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
...