每个实体持续增加1000个序列

时间:2015-05-14 03:14:53

标签: oracle jpa eclipselink

我们有一些jdbc遗留代码我们正在转换为JPA,我们曾经使用SELECT business_object_seq.nextval FROM dual;从oracle获取id,序列指定为CREATE SEQUENCE business_object_seq INCREMENT BY 1000 START WITH X;,X是小于1000的整数,与节点id匹配系统。

即对于节点3,获取下一个id的调用将是1003,2003,3003等

我转换后的实体如下

@Entity
@Table(name="BUSINESS_OBJECT")
@SequenceGenerator(name="BUSINESS_OBJECT_SEQ", allocationSize = 1000)

public class BusinessObject implements Serializable {

    private int id;

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="BUSINESS_OBJECT_SEQ")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    // Other Methods
}

但现在使用ID 3,4,5创建实体(在节点3上)。

不创建自定义序列生成器(link - > CustomSequence)是否可以让SequenceGenerator以这种方式运行?

干杯 亚当

1 个答案:

答案 0 :(得分:1)

如果您指定分配大小为1000,那么您告诉JPA每次获取序列值时都会分配1000个数字。因此,当它获得1003的值时,它认为它可以在需要转到数据库以获得更多值之前使用1003-2002。

将分配大小设置为1将导致它在每次需要数字时转到数据库,虽然效率较低,因为它不允许预分配,但它会为您提供所需的行为。然后,您只需要确保每个节点访问以不同初始值开始的序列。