Hibernate,liquibase和hsqldb的Id生成问题
我用liquibase创建了一个表:
生成以下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));
Hibernate确实根据方言选择最合适的策略。 由于HSQLDB支持标识列,因此它使用此策略。 此策略假设ID列由数据库自动生成,并且您没有将其定义为此类,因此它不起作用。
将generated by default as identity
的列定义generated by default as identity
,一切都应该没问题。 或者使用序列或表(您必须在数据库中定义)选择另一代策略。