Spring MVC实体Id(生成值)独立计数器



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

我的事件实体id配置

我的用户实体id配置

例如,这是我从这两个请求

得到的结果用户创建请求(您可以看到id值为1)

事件创建请求(您可以看到id值为2)

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

你的解决方案工作得很好;)我最后使用了它,并添加了@SequenceGenerator注释来初始化计数为0。

@SequenceGenerator(name = "seq", initialValue = 0)
public class ClassName {

@Id
@GeneratedValue(generator = "seq")
private Integer id;
}

非常感谢你Daniel,你真好。

您正在使用@GeneratedValue而没有提供策略。

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

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

结果是

  1. 创建ID = 1的事件实体作为在1
  2. 启动的生成器
  3. 创建ID = 1 + 1的用户实体,因为新生成的值被请求

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

下面使用DB序列生成ID

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

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

最新更新