当前位置: 代码迷 >> java >> 每个实体或表的 Hibernate_Sequence
  详细解决方案

每个实体或表的 Hibernate_Sequence

热度:79   发布时间:2023-07-25 19:08:17.0

默认情况下,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 中实现这种行为。

您应该尝试使用@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;

您需要在数据库中定义一个序列,使用@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;

}

与另一个相同 - 单独的序列生成器。