CockroachDB SERIAL字段不适用于JPA IDENTITY策略

时间:2018-04-07 15:55:19

标签: java hibernate jpa cockroachdb

我正在迁移一个应用程序以使用CockroachDB,我们正在使用带有SERIAL类型列的Java中的GeneratedValue映射来管理主键。

id                   SERIAL PRIMARY KEY -- SQL

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) -- Java JPA

我们收到以下错误

  

错误:currval():关系“scm_supply_centers_id_seq”不存在

我们挖了一点,发现这是因为PostgreSQL Dialect尝试插入最后一个id,你可以在这个链接中看到 PostgreSQL81IdentityColumnSupport

如何找到此问题的解决方法?

1 个答案:

答案 0 :(得分:0)

CockroachDB中的序列不支持SERIAL类型。要使用SEQUENCE,您需要显式创建它,并使用nextval()函数作为列的DEFAULT值。例如,

CREATE SEQUENCE customer_seq;

CREATE TABLE customer_list (
    id INT PRIMARY KEY DEFAULT nextval('customer_seq'),
    customer string,
    address string
);

请注意,由于额外的同步和通信要求,使用SEQUENCE vs SERIAL会对性能产生影响。有关详细信息,请参阅https://www.cockroachlabs.com/docs/stable/create-sequence.html

但上述内容并没有完全回答你的问题。我不知道如何使用Hibernate中的显式序列。