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

JPA单表继承中新增抽象实体类的注解选择疑问

JPA单表继承中新增抽象实体类的注解选择疑问

你好呀!针对你的问题,答案很明确——只需要给DigitalProduct标注@Entity就足够了,不需要额外加@MappedSuperclass,具体原因和注意事项如下:

  • 你的整个继承体系依然是基于SINGLE_TABLE单表继承的,所有实体(包括新增的抽象类DigitalProduct)都对应同一个products表。DigitalProduct作为继承链中的一环,标注@Entity才能让JPA将它纳入到这个单表继承的实体层次中,确保通用字段和方法能正确映射到表中。
  • 不需要给DigitalProduct指定@DiscriminatorValue,因为它是抽象类,不会有实例被持久化到数据库里,JPA只需要用鉴别器值区分那些可实例化的具体实体(也就是Book和EBook)就可以了。
  • 如果使用@MappedSuperclass,这个类就不再是JPA实体,仅仅是一个用来共享映射信息的父类,无法被纳入到实体继承体系中。而你这里的DigitalProduct是作为实体继承链的中间节点存在的,所以@MappedSuperclass并不适配这个场景。

给你补充一下正确的DigitalProduct写法示例:

@Entity
public abstract class DigitalProduct extends Product {
    // 在这里定义数字产品通用的字段和方法
}

你的EBook类修改后的写法完全没问题,保持原有的@DiscriminatorValue("2")即可:

@Entity
@DiscriminatorValue("2")
public class EBook extends DigitalProduct {
    // EBook特有的字段和方法
}

备注:内容来源于stack exchange,提问作者Michael Linker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:18:01