我使用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都没有被弹回。
答案 0 :(得分:2)
这是非常正常的行为。 Sequencer将预取/预重新调整值的间隔(并保存db中的间隔参数),但由于某种原因,他最终不会实际使用(保存实体)所有这些值。稍后当它到达所述间隔的最后一个值时,它将创建一个新值,而不管理/重新检查前一个间隔的所有值是否已用完。
答案 1 :(得分:2)
尝试在@SequenceGenerator
注释上设置分配大小。这指定了在分配序列号时要增加的数量。
@SequenceGenerator(name="TABLEA_ID_GENERATOR",
sequenceName="MYSCHEMA.SEQ_TABLEA", allocationSize=1)