有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA序列生成器生成意外的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

是否有可以使用的默认序列?如果是,我如何检查它的值


共 (2) 个答案

  1. # 1 楼答案

    JPA中的序列分配集必须与数据库中使用的分配大小匹配,否则在分配过程中会出现不匹配。尝试在SequenceGenerator定义中指定allocationSize=1:

    @SequenceGenerator(name=“seq_id”,allocationSize=1)

  2. # 2 楼答案

    您可以不按顺序执行相同的操作,请参阅下面的代码。您的pk列应该是自动递增的,并且自动递增应该从191418开始

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