在子类的Hibernate上为每个表指定不同的序列 [英] Specifying distinct sequence per table in Hibernate on subclasses
问题描述
我们的应用程序中的所有实体都扩展了一个超类。
在Hibernate中,是否有一种方法可以为每个表指定不同的序列? DataObject
像这样:
@MappedSuperclass
public abstract class DataObject实现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_sequence
和 entity_b_sequence
。如果在子类上指定了ID,那么我可以使用 @SequenceGenerator
注释为每个实体指定一个序列,但在这种情况下,ID在超类上。鉴于ID是超类,是否有一种方法可以为每个实体使用一个单独的序列 - 如果是,如何?
(我们使用的是PostgreSQL 8.3,以防相关) 解决方案
你试过这样做吗?
@MappedSuperclass
public abstract class DataObject实现了Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator =idgen)
@Column(name =id)
private int id;
$ b @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 {
}
对不起,我现在没有必要的环境来测试它,但我会稍后再试。
Is there a way to specify distinct sequences for each table in Hibernate, if the ID is defined on a mapped superclass?
All entities in our application extend a superclass called DataObject
like this:
@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 { ... }
This causes all entities to use a shared sequence, the default hibernate_sequence
.
What I would like to do is use a separate sequence for each entity, for example entity_a_sequence
and entity_b_sequence
in the example above. If the ID were specified on the subclasses then I could use the @SequenceGenerator
annotation to specify a sequence for each entity, but in this case the ID is on the superclass. Given that ID is in the superclass, is there a way I can use a separate sequence for each entity — and if so, how?
(We are using PostgreSQL 8.3, in case that's relevant)
Have you tried doing it this way ?
@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 {
}
I'm sorry I don't have the required environment to test it right now but I'll try it later.
这篇关于在子类的Hibernate上为每个表指定不同的序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!