Spring JPA SINGLE_TABLE наследование не работает - Таблица для подкласса не существует - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь использовать наследование 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());
...