如何使用Inheritance-per-class创建IDENTITY主键列?

时间:2016-07-07 12:09:08

标签: java hibernate

我想继承多个@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策略与继承一起使用?

1 个答案:

答案 0 :(得分:1)

您有几种选择。

您可以使用@Inheritance,而不是使用@MappedSuperclass,我相信您尝试完成的工作会很好。

如果您需要@Inheritance,则需要使用基于PROPERTY的注释而非FIELD并覆盖每个子类中的getter,如下所示:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Override
public Long getId() { ... }