我们有一些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以这种方式运行?
干杯 亚当
答案 0 :(得分:1)
如果您指定分配大小为1000,那么您告诉JPA每次获取序列值时都会分配1000个数字。因此,当它获得1003的值时,它认为它可以在需要转到数据库以获得更多值之前使用1003-2002。
将分配大小设置为1将导致它在每次需要数字时转到数据库,虽然效率较低,因为它不允许预分配,但它会为您提供所需的行为。然后,您只需要确保每个节点访问以不同初始值开始的序列。