JPA 序列生成器生成意外 ID

JPA sequence generator generates unexpected ID

当我尝试创建实体时

getEntityManager().persist(entity);

我有以下异常

Internal Exception: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "pkproperty"
  Detail: Key (id)=(191375) already exists.

我不明白它从哪里取这个 ID 值。我的数据库中只有一个序列,在我执行实体创建之前它的值为 191418。

此实体的 ID 描述是

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_id")
    @Basic(optional = false)
    @Column(name = "id")
    private Long id;

并且在数据库中我已经创建了序列 seq_id

有没有可以使用的默认顺序?如果是,我该如何检查它的价值?

你可以不按顺序做同样的事情,参考下面的代码。您的 pk 列应该是自动递增的,自动递增应该从 191418 开始。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", unique=true, nullable=false)
private Long id;

JPA 中设置的序列分配必须与数据库中使用的分配大小相匹配,否则您将在分配期间出现不匹配。尝试在 SequenceGenerator 定义中指定 allocationSize=1:

@SequenceGenerator(名称="seq_id", allocationSize=1)