问题描述
默认情况下,Hibernate 使用一个名为 hibernate_sequence 的全局序列。 因此,如果添加客户记录,id 生成 100,而接下来我添加国家记录,id 生成 101。
在国家模式
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CTRY_ID")
private long ctryID;
在客户模型中
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CUST_ID")
private long custID;
我想要客户和国家表的单独机制,即客户表中存储的最后一个 ID 是 91,所以在添加下一条记录时,ID 变为 92。类似的方式,存储在国家/地区的最后一个 ID 是 82,所以下一条记录,Id 应该是83.
我怎么能在 Spring Boot/Oracle 中实现这种行为。
1楼
您应该尝试使用@SequenceGenerator
注释创建自定义序列。
您可以设置序列的初始值initialValue = 1
并且allocationSize=1
用于增量。
如果您不使用allocationSize=1
休眠,则使用默认的分配大小 50。
对于国家:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="ctry_seq")
@SequenceGenerator(name = "ctry_seq", sequenceName = "ctry_seq", initialValue = 1, allocationSize=1)
@Column(name="CTRY_ID")
private long ctryID;
对于客户:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="cust_seq")
@SequenceGenerator(name = "cust_seq", sequenceName = "cust_seq", initialValue = 1, allocationSize=1)
@Column(name="CUST_ID")
private long custID;
2楼
您需要在数据库中定义一个序列,使用@SequenceGenerator
并将您的字段标记为由 db ( @GeneratedValue
) 生成:
CREATE SEQUENCE seq
MINVALUE 1
MAXVALUE 1000000
START WITH 1
INCREMENT BY 1
CACHE 100;
实体:
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100)
public class Country {
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
@Id long id;
}
与另一个相同 - 单独的序列生成器。