默认情况下,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中实现此行为。
答案 0 :(得分:2)
您应该尝试使用@SequenceGenerator
注释创建自定义序列。您可以设置序列initialValue = 1
的初始值,而allocationSize=1
is用于递增。如果您不使用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;
答案 1 :(得分:1)
您需要在数据库中定义一个序列,使用@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;
}
与另一个相同-单独的序列生成器。