加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读