一尘不染

在Hibernate中为子类的每个表指定不同的顺序

hibernate

如果ID是在映射的超类上定义的,是否可以为Hibernate中的每个表指定不同的序列?

我们应用程序中的所有实体都扩展了一个超类,DataObject如下所示:

@MappedSuperclass
public abstract class DataObject implements Serializable {
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id")
    private int id;
}

@Entity
@Table(name = "entity_a")
public class EntityA extends DataObject { ... }

@Entity
@Table(name = "entity_b")
public class EntityB extends DataObject { ... }

这将导致所有实体使用共享序列,即默认序列hibernate_sequence

我希望做的是使用一个单独的序列为每个实体,例如entity_a_sequenceentity_b_sequence上面的例子。如果在子类上指定了ID,则可以使用@SequenceGenerator批注为每个实体指定一个序列,但是在这种情况下,该ID在超类上。鉴于ID在超类中,有没有一种方法可以为每个实体使用单独的序列-
如果是这样,怎么做?

(如果相关,我们正在使用PostgreSQL 8.3)


阅读 232

收藏
2020-06-20

共1个答案

一尘不染

您是否尝试过这种方式?

@MappedSuperclass
public abstract class DataObject implements Serializable {
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen")
    @Column(name = "id")
    private int id;
}

@Entity
@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entityaseq")
@Table(name = "entity_a")
public class EntityA extends DataObject {

}

@Entity
@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entitybseq")
@Table(name = "entity_b")
public class EntityB extends DataObject {

}

很抱歉,我目前没有测试所需的环境,但我稍后会再尝试。

2020-06-20