Java CockroachDB串行字段不使用JPA身份策略
我正在迁移一个应用程序以使用CockroachDB,我们正在使用Java中的GeneratedValue映射和串行类型列来管理主键Java CockroachDB串行字段不使用JPA身份策略,java,hibernate,jpa,cockroachdb,Java,Hibernate,Jpa,Cockroachdb,我正在迁移一个应用程序以使用CockroachDB,我们正在使用Java中的GeneratedValue映射和串行类型列来管理主键 id SERIAL PRIMARY KEY -- SQL @Id @GeneratedValue(strategy = GenerationType.IDENTITY) -- Java JPA 我们得到以下错误 错误:currval():关系“scm\U supply\u Center\u id\u seq”不存在 我们挖掘了
id SERIAL PRIMARY KEY -- SQL
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) -- Java JPA
我们得到以下错误
错误:currval():关系“scm\U supply\u Center\u id\u seq”不存在
我们挖掘了一下,发现这是因为PostgreSQL方言试图插入最后一个id,正如您在这个链接中看到的那样
如何找到解决此问题的方法?序列类型不受CockroachDB中序列的支持。要使用
序列
,需要显式创建它,并使用nextval()
函数作为列的默认值。比如说,
CREATE SEQUENCE customer_seq;
CREATE TABLE customer_list (
id INT PRIMARY KEY DEFAULT nextval('customer_seq'),
customer string,
address string
);
请注意,由于额外的同步和通信要求,使用序列
与串行
会对性能产生影响。有关更多详细信息,请参阅
不过,上述情况并不能完全回答你的问题。我不知道如何使用Hibernate的显式序列。谢谢!这是另一种选择。我通过实现一个自定义Hibernate方言来修复它,允许在insert子句中返回ID。