Hibernate - @OneToMany в @MappedSuperclass создает таблицу для каждого дочернего объекта - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующая сущность, которая является базовой сущностью для всех остальных сущностей в приложении:

@Audited
@Data
@MappedSuperclass
public abstract class BaseEntity {

    public static final long UNSAVED = 0;

    @Id
    @GeneratedValue
    private long id;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Image> images;

    @OneToMany(cascade = CascadeType.ALL)
    private List<File> files;

}

Моя цель состоит в том, чтобы иметь две таблицы - images и files так, чтобы эти две таблицы были общими для всех сущностей, которые расширяют BaseEntity.Я понимаю, что для этого все сущности, которые расширяют BaseEntity, должны иметь одну общую последовательность идентификаторов.

И тогда у меня есть две сущности, которые являются подтипами BaseEntity:

@Entity
@Table
@Data
@EqualsAndHashCode(callSuper = false)
public class Equipment extends BaseEntity {
  private String name;
  @Enumerated(EnumType.STRING)
  private EquipmentType type;
  private String model;
  private String serial;
  private Boolean status;
}

@Entity
@Table
@Data
@EqualsAndHashCode(callSuper = false)
public class News extends BaseEntity {
  private String title;
  private String summary;
  private String content;
}

Теперь, когда яset spring.jpa.hibernate.ddl-auto = create-drop, hibernate генерирует для меня следующие таблицы:

news, equipment, news_images, news_files, equipment_images, equipment_files

Однако я хотел бы иметь вместо четырех таблиц:

   news, equipment, files, images

Я был бы очень признателен за любую помощь,

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте добавить в @OneToMany списки @JoinColumn(name="ID_SOMETHING").Эти имена столбцов из двух частей news_images являются таблицами объединения, созданными Hibernate, если не указано @JoinColumn.

...