在子类的Hibernate上为每个表指定不同的序列 [英] Specifying distinct sequence per table in Hibernate on subclasses

查看:68
本文介绍了在子类的Hibernate上为每个表指定不同的序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我们的应用程序中的所有实体都扩展了一个超类。

在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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆