对JPA生成的id有限制吗?

sirbozc5  于 2022-10-23  发布在  Spring
关注(0)|答案(1)|浏览(177)

我正在将数据插入Postgres数据库,以下是我的实体:

public class FileData {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Long id;
}

借助Intelligence J IDEA自动生成的存储库界面:

fileDataRepository.save(fileData);

我可以很好地将数据插入到我的数据库中,直到ID号达到当前值152560,然后每次我尝试插入一行数据时,我都会收到以下错误:

PSQLException: ERROR: duplicate key value violates unique constraint "file_data_pkey"
  Detail: Key (id)=(53) already exists.

我确认我构造的fileData的id值为空,每次我调用save(或saveAndFlush)时,重复的键值都会增加,在我看来,JPA似乎以某种方式决定重置这个表上的计数器。
所以我的问题是,JPA生成的数量有限制吗?有没有办法对其进行配置?

yjghlzjz

yjghlzjz1#

唯一的限制是数据库数据类型。
但是,您不应该使用@GeneratedValue(Strategy=GenerationType.AUTO),因为不清楚id将如何生成。Hibernate将尝试自己解决这一问题。
由于您使用的是PostgreSQL,因此应该采用如下顺序:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "filedata_seq")
@SequenceGenerator(name = "filedata_seq")

阅读有关https://vladmihalcea.com/jpa-entity-identifier-sequence/的更多信息

相关问题