继承的实体类的Hibernate架构验证错误



这是我继承的子实体,如下所示:-

@AllArgsConstructor
@Getter
@Setter
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "SUB_TABLE")
@DiscriminatorValue("R")
public class SubTable extends BaseAudit {
@Column(name = "REV", updatable = false, insertable = false)
private long rev;
@Column(name = "REVTYPE", updatable = false, insertable = false)
private long revType;
@Column(name = "active_from", updatable = false, insertable = false)
private Instant activeFrom;
@Column(name = "active_to", updatable = false, insertable = false)
private Instant activeTo;
public SubTable() {
}
}

我的基本实体如下:-

@Entity
@Table(name = "BASE_AUDIT")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "derive_type")
public abstract class BaseAudit {
@Id
@GeneratedValue
@Column(name = "id")
public Long id;
@Version
@Column(name = "version")
public Long version;
@CreatedBy
@Column(name = "created_by")
public String createdBy;
@CreatedDate
public Instant created;
@LastModifiedBy
@Setter(AccessLevel.PRIVATE)
@Column(name = "updated_by")
public String updatedBy;
@LastModifiedDate
@Setter(AccessLevel.PRIVATE)
public Instant updated;
@Column(name = "derive_type", insertable = false, updatable = false)
public String deriveType;
}

我将有许多子实体将从这个BaseAudit实体继承。我得到以下错误:-

init方法的调用失败;嵌套异常为javax.persistence.PersistenceException:[PersistenceUnit:default]无法建立Hibernate会话工厂;嵌套异常为org.hibernate.tool.schema.spi.SchemaManagement异常:架构验证:表[base_audit]中缺少列[active_to]

因此它抱怨基本实体缺少列active_to。但此列来自子实体。我不需要这个到基础实体。我将有许多其他子实体,只有常见的子实体在基本实体中。我怎样才能做到这一点?

使用@Inheritance(strategy = SINGLE_TABLE)完全按照它在锡上所说的做——关于父实体和子实体的所有数据都被压缩在一个表中。

这意味着@Table(name = "SUB_TABLE")被简单地忽略,因为您特别指示将SubTable的所有数据放入父级的BASE_AUDIT表中。由于BASE_AUDIT没有必要的列(REVREVTYPEactive_fromactive_to(,因此会出现模式验证错误。

你确定@MappedSuperclass不是你想要的@Inheritance吗?

最新更新