Я пытаюсь использовать наследование Spring JPA для моих сущностей. Ниже приведены фрагменты кода аннотаций, которые я использую для классов. Приложение основано на Spring Boot v2.2.2.RELEASE.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "entityType", discriminatorType = DiscriminatorType.STRING)
@Getter
@Setter
@NoArgsConstructor
public class RmlAction extends RmlBase {
//attributes
}
Подклассы: RmlEfsAction. java
@Entity
@Getter
@Setter
@DiscriminatorValue("EFS")
@Table(name = "rml_actions")
@DiscriminatorColumn(name = "entityType", discriminatorType = DiscriminatorType.STRING)
@NoArgsConstructor
public class RmlEfsAction extends RmlAction {
//no attribute
//only constructor
}
RmlProjectAction. java
@Entity
@Getter
@Setter
@DiscriminatorValue("PROJECT")
@Table(name = "rml_actions")
@DiscriminatorColumn(name = "entityType", discriminatorType = DiscriminatorType.STRING)
@NoArgsConstructor
public class RmlProjectAction extends RmlAction {
//no attribute
//only constructor
}
Сервер запускается нормально, но когда я пытаюсь сделайте ввод данных, он выдает следующую ошибку при получении сущности для RmlEfsAction. Приветствуется любая помощь в выявлении проблемы.
Caused by: org.hibernate.DuplicateMappingException: Duplicate table mapping rml_actions
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addDenormalizedTable(InFlightMetadataCollectorImpl.java:758)
at org.hibernate.cfg.annotations.TableBinder.buildAndFillTable(TableBinder.java:499)
at org.hibernate.cfg.annotations.EntityBinder.bindTable(EntityBinder.java:670)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:603)
Код для извлечения сущности:
RmlEfsAction dbAction = (RmlEfsAction) actionRepository.getOne(rmlAction.getId());