Spring Data在Oracle中的自增ID随机出现的问题解决

1. 开发环境介绍

Spring Data 1.6, JDK 1.6, Oracle 11g, Hibernate 4.3.5

2. 问题的提出

在开发中,使用Annotation来配置Entity,即对象与Table的映射;代码示例如下:

@Entity(name = "PayOrderEntity")@Table(name = "ES_OUTPAY_ORDER")public class OrderEntity extends AuditableBaseEntity {@Id@Column@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "orderGenerator")@SequenceGenerator(name = "orderGenerator", sequenceName = "outpay_order_sequence")private long id;……} 随机的ID会被插入数据库,ID为50, 150, 1050之类的递增:

2. 问题分析

数据库本身经过分析,没有问题,,工作正常;数据库表的创建语句也经过验证没有问题;最后经过分析,还是确定应该是代码的问题。原来的时候,使用Trigger来定义ID字段的自增,现在改用Annotation中的SequenceGenerator, 新出现的问题。

是否是generator定义本身的问题呢? 经过检查和验证,没有问题。

还是上网搜索吧, 终于看到了一个未曾用过的字段 allocationSize.

3. 问题的解决

修正之后的代码如下:

@Entity(name = "PayOrderEntity")@Table(name = "ES_OUTPAY_ORDER")public class OrderEntity extends AuditableBaseEntity {@Id@Column@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "orderGenerator")@SequenceGenerator(name = "orderGenerator", sequenceName = "outpay_order_sequence", allocationSize=1)private long id;……..}4. 什么是allocationSize?

在源代码的定义中,其缺省值为50,故会出现50/51的ID。 在JPA中,其ID是通过allocationSize来设定其变化Size的。

参考资料:

1.

2.

思念是对昨天悠长的沉淀和对未来美好的向往。

Spring Data在Oracle中的自增ID随机出现的问题解决

相关文章:

你感兴趣的文章:

标签云: