java - 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
我真的很感激任何帮助,
谢谢
解决方案
尝试添加到@OneToMany
列表中@JoinColumn(name="ID_SOMETHING")
。如果没有指定,这两个部分列名news_images
是 Hibernate 创建的连接表@JoinColumn
。
推荐阅读
- python - 在 django 管理表单中处理计算的后保存方法
- python - 如何让程序告诉你正在打印哪一行?
- c# - Microsoft.Azure.KeyVault.Models.KeyVaultErrorException:'操作返回了无效的状态代码'BadRequest''
- regex - 使用 RegExp 从 CSV 中的电话号码中查找和删除空格(如果可能,使用 Scite)
- dictionary - 使用基于 Geojson 几何的地图的 Highcharts (Highcharts-Vue) 钻取无法显示
- r - 如何根据特定的日期时间段选择部分数据?
- angular - 关于 rxjs 运算符
- matlab - 有没有更快的方法在 Matlab 中为 uint64 执行位旋转
- python-2.7 - 通过 yum install openssl11 将 CentOS 7 升级到 OpenSSL 1.1.1
- amazon-web-services - Sagemaker ML 实例类型是否使用基于实例类型模式的 Nitro 系统?