Spring MVC Entities Id (Generated value) 单独的计数器

Spring MVC Entities Id (Generated value) separate counter

开发新的 Java Spring MVC 微服务 我遇到了一个小问题。 当我为任何实体发送创建请求时,生成的 ID 总是跟在前一个之后。

My event entity id configuration

My user entity id configuration

例如,这是我从这 2 个请求中得到的结果

User creation request (you can see the id value is 1)

Event creation request (you can see the id value is 2)

创建的事件 ID 是最后创建的用户 ID + 1,我显然不希望发生这种情况。 我希望每个实体都有单独的 Id 值。我想知道我做错了什么。 谢谢

您正在使用 @GeneratedValue,但未提供策略。

因此它默认使用 AUTO 策略,这表明持久性提供程序应该为特定数据库选择合适的策略。

由于两个 ID 列共享相同的名称,因此我假设两个实体共享同一个生成器。

结果是

  1. 创建 ID = 1 的事件实体,因为生成器从一个开始
  2. 在请求新生成的值时创建 ID = 1 + 1 的用户实体

您应该考虑使用不同的序列为每个实体生成单独的 ID。

以下使用DB序列生成ID

@Id
@GeneratedValue(generator = "my_entity_name_seq")
private long id;

如果我不在注释 hibernate 中指定一个具体的生成器,例如将创建一个名为 hibernate_sequence 的默认序列,然后将其用于所有使用 @GeneratedValue 而不指定生成器的实体.然后这会导致所有表/实体的值增加。

你的解决方案工作者非常好 ;) 我终于使用了它并添加了 @SequenceGenerator 注释以将计数初始化为 0.

@SequenceGenerator(name = "seq", initialValue = 0)
public class ClassName {
  
  @Id
  @GeneratedValue(generator = "seq")
  private Integer id;

}

非常感谢你,丹尼尔,你真好。