java - 通过多个映射为实体映射中的重复列
问题描述
我不明白为什么我仍然得到hibernate.MappingException:
Repeated column in mapping for entity: PanelCategoryOption column: category_id (should be mapped with insert="false" update="false")
PanelCategoryOption 映射
@Entity
@Table(name = "eq_panel_category_option")
public class PanelCategoryOption {
@EmbeddedId
private PanelCategoryOptionId id;
}
PanelCategoryOptionId 映射
@Embeddable
public class PanelCategoryOptionId implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "panel_id", referencedColumnName = "panel_id"),
@JoinColumn(name = "category_id", referencedColumnName = "category_id")})
private PanelCategory panelCategory;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "category_option_id", referencedColumnName = "id", insertable = false, updatable = false),
@JoinColumn(name = "category_id", referencedColumnName = "category_id", insertable = false, updatable = false)})
private CategoryOption categoryOption;
}
架构
解决方案
为什么您在 PanelCategoryOption 表中有 category_id 参考。这不是规范化的数据库设计,因为它不满足第二范式。尝试并更新您的数据库设计。
此外,如果您不想更改数据库设计,则需要进行以下更改,
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "category_option_id", referencedColumnName = "id", insertable = false, updatable = false) })
private CategoryOption categoryOption;
@JoinColumns({
@JoinColumn(name = "category_id", referencedColumnName = "category_id", insertable = false, updatable = false)})
private Category category;
推荐阅读
- sql - 仅按有效值更新表中的行并跳过未定义的值
- generics - 可选地传递泛型参数?
- sql - 如何使用 sql 或 t-sql 将某些列转换为行
- nginx - 如何将 NGINX 反向代理到具有自签名证书的后端服务器?
- sql - SQLite - 从相同的 ID 获取 SUM
- javascript - .addField 值可以写入包含文件“名称”的数组吗?
- awk - 在bash中按指定的序列长度过滤掉FASTA文件
- c# - SimpleInjector 延迟反射
- excel - 如何在 Excel 数据透视图中绘制 90000 个点
- javascript - 如何减少我的 vuejs 网络应用程序的 app.js 大小?