【发布时间】:2012-03-20 22:29:05
【问题描述】:
我的目标是 EJB 在从实体生成表时应该生成一个序列。我怎样才能做到这一点?
我考虑过这一点,但在那种情况下,我只使用现有的序列。我想要一个由 JPA 生成的序列。我认为这是不可能的,不是吗?
@Entity
@Table(name = "CUSTOMER")
@SequenceGenerator(name = "sb_sequence",sequenceName = "sb_sequence", initialValue=5420)
public class Customer extends EntityBase
{
private static final long serialVersionUID = 3456353535358L;
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sb_sequence")
@Column(name = "CUS_SEQUENCE")
private long cusSequence;
.
.
.
}
背景:在将第一个值插入数据库之前,我需要检索第一个序列号(可能使用 select nextval('sequence'); )
【问题讨论】:
-
这看起来真的不依赖于 JPA,而是依赖于你的 JPA 实现来生成 DDL。也就是说,如果您想在对象被持久化到存储之前知道对象的 ID 是什么,您可能需要自己处理调用序列。在使用
GenerationType.SEQUENCE保存对象之前运行select nextval('sequence');实际上会导致生成两个序列号。另请参阅this related question。
标签: postgresql jpa ejb-3.0 sequence ejb-3.1