2

我正在使用 Open JPA 2.0、WebSphere V8 和数据库是 DB2 V10。

使用以下语法创建序列

创建序列“MYSCHEMA”。“SEQ_TABLEA”作为整数开始,增量为 1 最小值 1000 最大值 2147483647 没有循环缓存 100 顺序;

我的实体类定义使用如下序列

@Entity
@Table(name="MYSCHEMA.SEQ_TABLEA")
public class MyEntity implements Serializable {

    @Id
    @SequenceGenerator(name="TABLEA_ID_GENERATOR", sequenceName="MYSCHEMA.SEQ_TABLEA")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TABLEA_GENERATOR")
    @Column(name="ID")
    private Integer myId;

    ..

在 3 到 4 天内多次插入 TABLEA 后,我发现序列号已跳过许多值。创建序列的插入如 1,2,3,100,101,102,103,104,105,200,201,202,300,301,302,303,304,305,306,307,308,309,310,400,.. 等

对出了什么问题有任何看法吗?插入时我没有发现任何错误,在此期间也没有退回数据库。

4

2 回答 2

2

这是非常正常的行为。排序器将预取/预解析值的间隔(并将间隔参数保存在数据库中),但由于某种原因,他最终不会实际使用(保存实体)所有这些值。稍后,当它到达所述间隔的最后一个值时,它将创建一个新值,而无需关心/重新检查上一个间隔的所有值是否都已用完。

于 2012-11-29T11:52:26.893 回答
2

@SequenceGenerator尝试在注释上设置分配大小。这指定了分配序列号时要增加的数量。

@SequenceGenerator(name="TABLEA_ID_GENERATOR", 
  sequenceName="MYSCHEMA.SEQ_TABLEA", allocationSize=1)

Java API

关于 JPA 中序列的好文章

于 2012-11-29T11:52:33.117 回答