如何在子类中重写@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
相关产品推荐
相关产品推荐

