为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Data Jpa 不会自动获取 Next Id (PK),它总是从 1 开始

Spring Data Jpa 不会自动获取 Next Id (PK),它总是从 1 开始

慕娘9325324 2023-06-04 15:21:25
我正在开发Spring Boot (2.1.7.RELEASE) +Data Jpa + Postgres示例。在此示例中,我明确传递了EMP_IDvalue= 100,接下来我允许 data-jpa 自动获取下一个 Id,即101. 我不确定为什么它不能那样工作??Employee.java@Data@AllArgsConstructor@NoArgsConstructor@EqualsAndHashCode(callSuper = true)@Entitypublic class Employee extends BaseEntity{    @Id    @GeneratedValue(strategy = IDENTITY)    @Column(name = "EMP_ID", unique = true, nullable = false)    private Integer empId;    @Column(name = "EMP_NAME", unique = true, nullable = false)    private String empName;    @Column(name = "EMP_EMAIL", unique = true, nullable = false)    private String empEmail;    @Builder(builderMethodName="eBuilder")    public Employee(Integer empId, String empName, String empEmail,            Instant createdDate, Instant lastUpdateDate,String createUser, String lastUpdateUser) {        super(createdDate, lastUpdateDate, createUser, lastUpdateUser);        this.empId = empId;        this.empName = empName;        this.empEmail = empEmail;    }}BaseEntity.java@Data@MappedSuperclass@NoArgsConstructor@AllArgsConstructor@EntityListeners(AuditingEntityListener.class)public class BaseEntity {    @CreatedDate    @Column(name = "createdDate", nullable = false, updatable = false)    private Instant createdDate;    @Column(name = "lastUpdateDate", nullable = false)    @LastModifiedDate    private Instant lastUpdateDate;    @Column(name = "createUser", nullable = false, length = 50)    private String createUser;    @Column(name = "lastUpdateUser", length = 50)    private String lastUpdateUser;}即使我在下面使用,仍然效果不佳@Id    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emp_generator")    @SequenceGenerator(name="emp_generator", sequenceName = "emp_seq", allocationSize=1)    @Column(name = "EMP_ID", unique = true, nullable = false)    private Integer empId;
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

这将起作用:

@GeneratedValue(strategy=GenerationType.SEQUENCE)


查看完整回答
反对 回复 2023-06-04
?
守着一只汪

TA贡献1872条经验 获得超3个赞

我明确传递了 EMP_ID 值 = 100,接下来我允许 data-jpa 自动获取下一个 ID,即 101。我不确定为什么它不能以这种方式工作?

JB Nizet :

序列生成器包括从数据库序列中获取下一个 ID。不是从您自己最后插入的 ID 获取下一个 ID。

我一直想通过始终执行 max id +1 来保存记录。有没有办法用 Spring Data JPA 做到这一点

JB Nizet 再次指出这是一个糟糕的想法。这将需要锁定每个插入的索引或至少锁定索引,包括选择以确定下一个 id。

查看完整回答
反对 回复 2023-06-04
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

EMP_ID确保数据库上的类型:SERIALInteger。要与 postgres 一起使用,IDENTITY它必须是SERIAL


查看完整回答
反对 回复 2023-06-04
  • 3 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信