JPA序列跳过值

时间:2012-11-29 11:45:21

标签: java jpa db2 websphere jpa-2.0

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

使用以下语法

创建序列
  

创建序列“MYSCHEMA”。“SEQ_TABLEA”AS INTEGER START WITH 1   增加1 MINVALUE 1000 MAXVALUE 2147483647 NO CYCLE CACHE 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,...等等

关于出了什么问题的任何看法? 我在插入时没有发现任何错误,在此期间DB都没有被弹回。

2 个答案:

答案 0 :(得分:2)

这是非常正常的行为。 Sequencer将预取/预重新调整值的间隔(并保存db中的间隔参数),但由于某种原因,他最终不会实际使用(保存实体)所有这些值。稍后当它到达所述间隔的最后一个值时,它将创建一个新值,而不管理/重新检查前一个间隔的所有值是否已用完。

答案 1 :(得分:2)

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

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

Java API

Good Article on Sequences in JPA