我正在迁移一个应用程序以使用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
如何找到此问题的解决方法?
答案 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中的显式序列。