【问题标题】:using oracle sequences with jpa (toplink)使用 jpa 的 oracle 序列(toplink)
【发布时间】:2011-11-24 04:24:06
【问题描述】:

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

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

我将 jpa(toplink) 用于我的 Web 应用程序。我的所有数据库对象都有基类:

@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)。

之后,我去我的数据库,查看我的序列对象的 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

【问题讨论】:

    标签: oracle jpa sequence toplink


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2011-07-31
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2011-11-13
      相关资源
      最近更新 更多