首页 > 解决方案 > Hibernate - @MappedSuperclass 中的 @OneToMany 为每个子实体生成表

问题描述

我有以下实体,它是应用程序中所有其他实体的基础实体:

@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;

}

我的目标是有两个表 -图像文件,以便这两个表共享给扩展 BaseEntity 的所有实体。我确实意识到,所有扩展 BaseEntity 的实体都应该有一个共享的 id 序列。

然后我有两个实体是 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;
}

现在,当我设置时spring.jpa.hibernate.ddl-auto = create-drop,hibernate 会为我生成以下表格:

news, equipment, news_images, news_files, equipment_images, equipment_files

但是,我想有四个表:

   news, equipment, files, images

我真的很感激任何帮助,

谢谢

标签: javahibernatespring-data-jpaspring-data

解决方案


尝试添加到@OneToMany列表中@JoinColumn(name="ID_SOMETHING")。如果没有指定,这两个部分列名news_images是 Hibernate 创建的连接表@JoinColumn


推荐阅读