You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@EmbeddedId定义复合主键时Hibernate为何生成额外独立表?

问题原因

Player实体中定义的stats一对多关联没有指定mappedBy属性,未明确关联关系由PlayerStat侧维护,JPA对未配置mappedBy的单向@OneToMany默认采用中间关联表的方式存储关联关系,因此自动生成了多余的player_stats表。

修复方案

修改Player类中stats属性的@OneToMany注解,添加mappedBy指定关联维护方:

// 修改前
// @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
// private Set<PlayerStat> stats;

// 修改后
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "key.player")
private Set<PlayerStat> stats;

说明

  • mappedBy的值key.player对应PlayerStat实体中关联Player的属性路径:PlayerStat的主键是key属性,key属性内部的player字段指向所属的Player实体,因此需要写全路径。
  • 修复后关联关系将直接通过player_stat表的player_id外键维护,不会再生成多余的中间表,和预期的表结构、查询逻辑完全一致。

内容的提问来源于stack exchange,提问作者oa54

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:18:04