将一个序列递增 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 将导致它在每次需要数字时都转到数据库,虽然由于不允许预分配而效率较低,但它会为您提供所需的行为。然后您只需要确保每个节点访问一个以不同初始值开始的序列。
我们有一些要转换为 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 将导致它在每次需要数字时都转到数据库,虽然由于不允许预分配而效率较低,但它会为您提供所需的行为。然后您只需要确保每个节点访问一个以不同初始值开始的序列。