首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现id字段以外的自增字段?

如何实现id字段以外的自增字段?
EN

Stack Overflow用户
提问于 2020-09-11 19:35:38
回答 2查看 460关注 0票数 1

我想实现一个自动递增字段,而不是id字段,它从1开始,按顺序递增1。

代码示例:

代码语言:javascript
复制
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id; //Id primary key

@Column(name = "request_number", nullable = false, unique = true, updatable = false, insertable = false)
@GeneratedValue(generator = "sequence", strategy = GenerationType.AUTO)
private Long requestNumber; //Talking about this

因此,每次创建对象时,这里的requestNumber都会自动增加。这应该会按顺序增加。

示例:第一个条目的requestNumber将以1开头,下一个requestNumber将使用2so on...赋值

我知道这是可以通过java代码,但我正在寻找JPA提供这样的灵活性。

EN

回答 2

Stack Overflow用户

发布于 2020-09-11 19:57:24

@GeneratedValue仅用于简单的主键,根据javadoc:

GeneratedValue注释可以与Id注释一起应用于实体或映射超类的主键属性或字段。对于简单的主键,只需要支持使用GeneratedValue注释。派生主键不支持使用GeneratedValue批注。

如果您想在JPA中完成此操作,您可以定义一个@PrePersist方法,如下所示:

代码语言:javascript
复制
@PrePersist
void doPrePersist() {
    // Use EntityManager to create a native query
    // read next value from a sequence
    // set the field value
}

另一种选择是将数据库列定义为IDENTITY,但这将考虑到在JPA之外自动递增,例如,实体字段将不能插入,并且在实体持久化操作期间看不到值。

请注意,SQL Server和大多数数据库不能保证序列中不会有间隙。当回滚增加序列的事务时,序列的值不会回滚,因此您可以使用: 1,2,4,5,6,10,...

票数 1
EN

Stack Overflow用户

发布于 2020-09-11 19:57:15

您必须在您的类(或字段)上声明一个@SequenceGenerator注释:

代码语言:javascript
复制
@SequenceGenerator(sequenceName = "MY_DB_SEQUENCE", name = "sequence")
public class MyClass {
    // keep as is
}

请注意,@GeneratedValue上的generator = "sequence"指向包含name = "sequence"@SequenceGenerator

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63846289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档