gpt4 book ai didi

java - Hibernate、liquibase 和 hsqldb 的 ID 生成问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:28:38 25 4
gpt4 key购买 nike

我使用 liquibase 创建了一个表:

<createTable tableName="employees">
<column name="id" type="bigint">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
</createTable>

生成以下sql ddl查询:

CREATE TABLE employees (id BIGINT NOT NULL, name VARCHAR(50) NOT NULL, CONSTRAINT PK_EMPLOYEES PRIMARY KEY (id));

对应实体:

@Entity
@Table(name="employees")
public class EmployeeAccessProperty ...
@Id
@GeneratedValue
public long getId() {
return id;
}
...

现在,当我尝试通过 JPA 实现保存它时,会生成 sql 查询以插入数据:

Hibernate: insert into employees (id, name) values (default, ?)
2013-05-20T14:29:22.525+0700 WARN SQL Error: -5544, SQLState: 42544
2013-05-20T14:29:22.526+0700 ERROR DEFAULT keyword cannot be used as column has no DEFAULT

我预计,当我不指定 id 生成策略时,Hibernate 会根据提供程序选择最佳的一个。我不明白为什么要为 ID 生成尝试使用默认值。我不确定,哪一方对错误负责:hibernate、liqubase 或 hsqldb。

我该怎么做才能解决这个问题?请帮助我。

最佳答案

您并没有告诉数据库您的主键必须自动生成。以这种方式创建你的表:

CREATE TABLE employees (id BIGINT GENERATED BY DEFAULT AS IDENTITY, name VARCHAR(50) NOT NULL, CONSTRAINT PK_EMPLOYEES PRIMARY KEY (id));

关于java - Hibernate、liquibase 和 hsqldb 的 ID 生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com