首页 > 解决方案 > 返回的实体ID与数据库中保存的实际数据不同

问题描述

我正在使用 Spring Data JPA。当我检查 save(Entity) 方法返回的实体时,它与数据库中保存的实际 ID 不同。我正在使用 Oracle,而我的实体 ID 配置正在使用来自 Oracle db 的序列。

@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_NAME")
@SequenceGenerator(name = "SEQ_NAME", sequenceName = "SEQ_1", allocationSize = 1)
private BigDecimal id;

示例场景:

  1. 使用 save(record1) 插入记录 1;
  2. 检查记录 1 的 ID = 1001
  3. 检查了db,id是1002。

除身份证外,其他数据均正常。

编辑:

我删除了代码中的所有其他逻辑,只留下保存部分来隔离问题。

标签: springoraclespring-data-jpa

解决方案


我刚刚发现每次插入记录时都会调用 SEQ1.nextVal 的数据库触发器。删除触发器并更改表以具有 DEFAULT SEQ1.nextVal 解决了我的问题。


推荐阅读