JPA序列生成器生成意外的ID

时间:2016-07-18 12:34:42

标签: java jpa eclipselink

当我尝试创建实体

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 个答案:

答案 0 :(得分:1)

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

@SequenceGenerator(name =" seq_id",allocationSize = 1)

答案 1 :(得分:0)

你可以在没有序列的情况下做同样的事情,参考下面的代码。你的pk列应该是自动增量,自动增量应该从191418开始。

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