这是我继承的子实体,如下所示:-
@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
没有必要的列(REV
、REVTYPE
、active_from
、active_to
(,因此会出现模式验证错误。
你确定@MappedSuperclass
不是你想要的@Inheritance
吗?