每个Enitity或表的Hibernate_Sequence

时间:2019-02-25 12:34:08

标签: oracle hibernate spring-boot

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

2 个答案:

答案 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;

}

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