如果ID是在映射的超类上定义的,是否可以为Hibernate中的每个表指定不同的序列?
我们应用程序中的所有实体都扩展了一个超类,DataObject如下所示:
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。
hibernate_sequence
我希望做的是使用一个单独的序列为每个实体,例如entity_a_sequence与entity_b_sequence上面的例子。如果在子类上指定了ID,则可以使用@SequenceGenerator批注为每个实体指定一个序列,但是在这种情况下,该ID在超类上。鉴于ID在超类中,有没有一种方法可以为每个实体使用单独的序列- 如果是这样,怎么做?
entity_a_sequence
entity_b_sequence
@SequenceGenerator
(如果相关,我们正在使用PostgreSQL 8.3)
您是否尝试过这种方式?
@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 { }
很抱歉,我目前没有测试所需的环境,但我稍后会再尝试。