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

Hibernate继承TABLE策略为何需独立序列表?能否用各表IDENTITY列?

关于Hibernate TABLE继承策略中ID生成的疑问解答

首先得明确TABLE继承策略的核心逻辑:父类和每个子类都对应独立的数据库表,父表存储公共属性,子表仅存特有属性,父子表通过相同的主键值关联。这就要求所有实体(父类+子类)的ID必须是全局唯一的,否则查询父类数据时,不同子表的重复ID会直接导致数据关联混乱。

为什么不能用各表的IDENTITY列?原因很直接:

  • IDENTITY是数据库层面的自增策略,每个表独立维护自增序列,不同子表的ID极易重复(比如子表A的ID从1开始,子表B的ID也从1开始)。这种情况下,查询父类对应的所有子类数据时,根本无法区分ID=1的记录到底来自哪个子表,父子表的关联逻辑直接失效。
  • 而TABLE生成器是通过一个专门的序列表(默认是hibernate_sequences)统一生成全局唯一ID,所有实体的ID都从这个表获取,从根源上保证了跨表的ID唯一性,完美适配TABLE继承策略的关联需求。

再看你贴的代码:

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(updatable = false, nullable = false, insertable = false)
protected int id;

这里insertable = false和updatable = false是因为ID由TABLE生成器负责生成和维护,不需要手动插入或更新,避免和生成器的逻辑冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:45:24