【发布时间】:2018-12-14 09:28:16
【问题描述】:
我有一个应用程序,其中我有 PK Id 的自动增量。我必须添加其他自动增量列,并使用 liquibase 使其工作 - liquibase 创建了自动增量序列。当我从查询工具进行插入或当我不在实体中映射该字段并使持久自动增量起作用时。但是当我添加:
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "next_value", nullable=false, unique=true)
private Long nextValue;
我收到一个丑陋的错误:
Caused by: org.postgresql.util.PSQLException: ERROR: empty value in the "next_value" column violates the limit of the required value
这里有什么问题?
编辑:
我的 liquibase 变更集添加此列并使其自动递增:
<addColumn tableName="table">
<column name="next_value" type="number"/>
</addColumn>
<addAutoIncrement
columnDataType="number"
columnName="next_value"
incrementBy="1"
startWith="1"
tableName="table"/>
<sql>select setval('table_next_value_seq', (select cast(current_value+1 as bigint) from gapless_sequence), false)</sql>
setval 不是从 1 开始的
【问题讨论】:
-
请edit您的问题并为相关表格添加
create table声明。 -
IDENTITY 并不意味着序列。这意味着在数据库中生成的列...例如 AUTO_INCREMENT 或 SERIAL。不发布您的架构是什么使问题猜测......
-
@BillyFrost: Postgres 中的
identity列是使用序列实现的(与serial列相同) -
如何在数据库内部“实现”某些东西超出了 JPA 的范围。 JPA 提供者将需要一个 IDENTITY COLUMN,结束。直到 OP 为他们的表发布 DDL,并且在插入时调用了什么 SQL,这一切都毫无意义
标签: java postgresql jpa jakarta-ee