使用oracle序列与jpa (topplink)



我有一个序列对象在我的oracle数据库:

create sequence BASE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 100
increment by 1
nocache;

我使用jpa(topplink)为我的web应用程序。我有基类为我所有的db对象:

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class AbstractEntity implements Serializable {
    protected BigDecimal id;
    @javax.persistence.Column(name = "ID")
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BASE_SEQ")
    @SequenceGenerator(name="BASE_SEQ",sequenceName="BASE_SEQ", catalog = "DOF")
    public BigDecimal getId() {
        return id;
    }

这个类被一些实体继承。在我启动我的应用程序,并坚持/合并几个实体到数据库后,我可以发现,他们的PK从51开始(而不是预期的100)。

之后,我去我的db,查看我的序列对象的DDL,看到它已被更改为:

create sequence BASE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 101
increment by 1
nocache;

为什么会这样?我有一些实体在PK 51,52…等等,以101开头的序列。

AS - GlassFish 3.1.1

SequenceGenerator上默认的preallocationSize是50,它必须匹配您的序列增量,您已将其设置为1。

要么将增量更改为50(推荐),要么将preallocationSize更改为1(这将导致插入性能差)。

相关内容

  • 没有找到相关文章

最新更新