我想实现一个自动递增字段,而不是id字段,它从1开始,按顺序递增1。
代码示例:
@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将使用2和so on...赋值
我知道这是可以通过java代码,但我正在寻找JPA提供这样的灵活性。
发布于 2020-09-11 19:57:24
@GeneratedValue仅用于简单的主键,根据javadoc:
GeneratedValue注释可以与Id注释一起应用于实体或映射超类的主键属性或字段。对于简单的主键,只需要支持使用GeneratedValue注释。派生主键不支持使用GeneratedValue批注。
如果您想在JPA中完成此操作,您可以定义一个@PrePersist方法,如下所示:
@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,...
发布于 2020-09-11 19:57:15
您必须在您的类(或字段)上声明一个@SequenceGenerator注释:
@SequenceGenerator(sequenceName = "MY_DB_SEQUENCE", name = "sequence")
public class MyClass {
// keep as is
}请注意,@GeneratedValue上的generator = "sequence"指向包含name = "sequence"的@SequenceGenerator
https://stackoverflow.com/questions/63846289
复制相似问题