Java 带有SequenceGenerator和GeneratedValue的JPA

Java 带有SequenceGenerator和GeneratedValue的JPA,java,oracle,hibernate,jpa,Java,Oracle,Hibernate,Jpa,我有一个使用JPA注释生成DB主键的代码。DB序列用于使用Oracle DB生成PK.Am @Id @Column(name = "rec_id", scale = 0) @GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE) @SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE") publ

我有一个使用JPA注释生成DB主键的代码。DB序列用于使用Oracle DB生成PK.Am

@Id
@Column(name = "rec_id", scale = 0)
@GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE")
public Long getRecordId() {
    return outboundPackageRecordId;
}
现在我的理解是:DB sequencer返回的序列id用作rec_id。 这是正确的吗

医生说:

顺序策略 序列策略包括两部分:定义命名序列和在一个或多个字段中使用命名序列 更多的课程。@SequenceGenerator注释用于定义 序列并接受名称,初始值默认为1和 分配大小默认为50。序列是全局的 应用程序中的一个或多个字段可以使用 上课。在@GeneratedValue中使用序列策略 注释将给定字段附加到先前定义的命名 顺序:

与自动和标识不同,顺序策略生成自动 值,即在新实体对象被持久化之前 犯罪当需要主键值时,这可能很有用 早期的。为了最大限度地减少到数据库服务器的往返,需要使用ID 分组分配。指定每个分配中的ID数 通过allocationSize属性。可能有些ID 在给定的分配中,将不使用。因此,这一战略确实有效 不保证序列值中没有间隙


这将使用序列p_REC_ID_序列中的下一个值

这还取决于您使用的数据库。您可以在Postgres中定义序列,但不能在MySQL中定义序列

如果您使用的是MYSQL,那么您可以使用自动递增,但不需要定义序列

如果您使用的是ORACLE数据库,则将序列定义为

CREATE SEQUENCE emp_sequence
      INCREMENT BY 1
      START WITH 1

现在,如果当前序列值为100,那么下一个序列值将为101。我希望这是有道理的

在主键列上使用生成类型作为自动序列

@GeneratedValue(strategy = GenerationType.AUTO, generator = "generator")
@SequenceGenerator(name="generator", sequenceName="DB_SEQ_NAME")

@我们正在使用oracle数据库。也可以通过下一个值来表示P_REC_ID_序列返回的平均值,对吗?是。从P_REC_ID_序列返回的下一个值。
@GeneratedValue(strategy = GenerationType.AUTO, generator = "generator")
@SequenceGenerator(name="generator", sequenceName="DB_SEQ_NAME")