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

如何在子类中重写@MappedSuperclass继承字段的updatable和insertable属性

解决方案:在子类中覆盖父类字段的JPA列属性

你可以通过@AttributeOverride注解,在不修改父类代码的前提下,单独为Book子类调整继承字段的JPA映射配置,具体实现如下:

@MappedSuperclass
public class StockItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "producer_id")
    private Integer producerId;

}

@Entity
public class Producer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private Integer name;

}

@Entity
@Table(name = "stock_item")
// 覆盖父类producerId字段的列属性配置
@AttributeOverride(name = "producerId", column = @Column(name = "producer_id", insertable = false, updatable = false))
public class Book extends StockItem {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "producer_id")
    private Producer producer;

}

说明:

  • @AttributeOverride会针对Book类继承的producerId字段,单独修改其列属性,将insertable和updatable设为false,JPA操作Book实体时会忽略该字段的写入逻辑。
  • Book类中的producer关联字段会接管producer_id列的插入和更新操作,避免字段映射冲突。
  • 父类StockItem的配置完全保留,其他继承它的子类仍可正常使用producerId字段的默认可插入、可更新特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:01:17