java – Hibernate,liquibase和hsqldb的Id生成问题
发布时间:2020-12-15 04:10:29 所属栏目:Java 来源:网络整理
导读:我用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 生
我用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,CONSTRAINT PK_EMPLOYEES PRIMARY KEY (id)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |