如何工作@Inheritance plus GenerationType.SEQUENCE

时间:2015-07-30 14:21:01

标签: java postgresql jpa

我正在尝试使用AbstractEntity创建一种模拟未来应用程序的方法 我现在的问题是Postgres的序列类型

在我的抽象类中,我现在不知道如何为每个实体类生成一个序列

有可能吗?

抽象

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Abstract {

    @Id
    @GeneratedValue(generator="seq_Broker",strategy=GenerationType.SEQUENCE)
    @SequenceGenerator(name="seq_Broker",sequenceName="seq_Broker")
    private Long id;

}

EntityModel

@Entity
@Table(name = "tb_EntityModel")
public class EntityModel extends Abstract{

    private String value;
    private String value2;

    public EntityModel(String value, String value2) {
        this.value = value;
        this.value2 = value2;
    }
}

1 个答案:

答案 0 :(得分:1)

对于任何继承类型,@Entity超类都不可能,因为主表(Abstract的表)将始终包含使用的ID - 显然您只能使用一个序列,否则你会遇到唯一性问题。

但您可以为@MappedSuperclass定义Abstract

@MappedSuperclass
public abstract class Abstract {
    public static final String SEQUENCE_GENERATOR = "seq";

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_GENERATOR)
    private Long id;
}

@Entity
@Table(name = "tb_EntityModel")
@SequenceGenerator(name = Abstract.SEQUENCE_GENERATOR, sequenceName = "tb_entity_sequence")
public class EntityModel extends Abstract { 
    ... 
}