我想继承多个@Entity
,每个都应该通过数据库序列递增主键,使用:
id bigint NOT NULL DEFAULT nextval('id_seq'::regclass)
因此,我尝试使用GenerationType.IDENTITY
,如下所示:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
//auto generates the id on database side
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
@Entity
public class MyEntity extends BaseEntity {
}
结果:
org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for BaseEntity.class
为什么呢?我怎样才能将id策略与继承一起使用?
答案 0 :(得分:1)
您有几种选择。
您可以使用@Inheritance
,而不是使用@MappedSuperclass
,我相信您尝试完成的工作会很好。
如果您需要@Inheritance
,则需要使用基于PROPERTY
的注释而非FIELD
并覆盖每个子类中的getter,如下所示:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Override
public Long getId() { ... }