0

我正在使用 Spring Boot 2 来创建微服务。我有一个保存实体的场景。在 Id 列的实体中,我添加了如下所示

@Id
@GeneratedValue(Strategy=GenerationType.Auto, generator="increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="Id", insertable=false)
private Integer id;

以上有时有效,有时会引发主键约束违规异常。但这并不一致。我将它作为具有不同端口的两个实例运行。

我得到的错误是违反了唯一约束:

ConstraintViolationException:无法执行语句;约束[primary_key_cons];嵌套异常是 ConstraintViolationException。

我唯一的选择是将策略更改为顺序。

4

2 回答 2

0

不要使用具有策略增量的通用生成器。不建议在集群中使用。

increment 生成 long、short 或 int 类型的标识符,这些标识符仅在没有其他进程将数据插入同一个表时才是唯一的。不要在集群中使用。

欲了解更多信息 - 这里

使用GenerationType.SEQUENCE并创建一个SequenceGenerator.

例子,

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "YourSequenceGenerator")
@SequenceGenerator(sequenceName = "YourSequence", name = "YourSequenceGenerator", allocationSize = 1)
private Integer id;
于 2021-08-28T12:25:04.947 回答
0

您是否手动插入了一些数据?也许休眠正在生成数据库中已经存在的 id 值。如果可以,请清除该表并再次测试

于 2021-08-17T08:24:32.483 回答