开发一个新的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列共享相同的名称,我假设两个实体共享一个且相同的生成器。
结果是
- 创建ID = 1的事件实体作为在1 启动的生成器
- 创建ID = 1 + 1的用户实体,因为新生成的值被请求
您应该考虑使用不同的序列为每个实体生成单独的id。
下面使用DB序列生成ID
@Id
@GeneratedValue(generator = "my_entity_name_seq")
private long id;
如果我没有在注释hibernate中指定一个具体的生成器,例如将创建一个名为hibernate_sequence
的默认序列,然后用于所有使用@GeneratedValue
而不指定生成器的实体。这将导致所有表/实体上的值递增。