将一个序列递增 1000,每个新实体持续存在

Incrementing a sequence by 1000 each persist of a new Entity

我们有一些要转换为 JPA 的 jdbc 遗留代码,我们过去使用 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
}

但是现在创建的实体(在节点 3 上)的 ID 为 3、4、5。

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

干杯 亚当

如果您将分配大小指定为 1000,则您是在告诉 JPA 每次获取序列值时都会分配 1000 个数字供其使用。所以当它得到一个值1003时,它认为它可以使用1003-2002,然后才需要去数据库中获取更多的值。

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