Hibernate:hbm2ddl没有将sequence.nextval设置为列默认值

时间:2014-04-04 15:10:59

标签: java sql hibernate

我遇到了将序列映射到列默认值的问题 使用Hibernate的hbm2ddl生成数据库模式。使用hbm2ddl后 在新数据库上,生成的SQL不会在表上设置默认值。 当使用除Hibernate之外的任何东西来发出插入语句时,这会导致问题。

以下java代码详细介绍了麻烦的实体:

@Entity
@Table(name = "ROLE")
public class Role {

    @Id
    @Column(name = "ROLE_ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
    @SequenceGenerator( name = "seq", sequenceName = "SEQ_ROLE_ID", allocationSize=1, initialValue=1)
    public Integer getRoleId() {
        return roleId;
    }

    ...
}

以上按以下顺序生成以下SQL:

create table ROLE (ROLE_ID integer not null, primary key (ROLE_ID))
create sequence SEQ_ROLE_ID

通过Hibernate发布插件的工作正如您所期望的那样,但是通过SQL发出插入 (E.G.,INSERT INTO "ROLE" (NAME) VALUES ('ADMIN');)导致a NULL not allowed for column "ROLE_ID"错误消息。

无论如何,我可以按照以下顺序让hbm2ddl生成以下SQL吗?

CREATE SEQUENCE SEQ_ROLE_ID
CREATE TABLE ROLE (ROLE_ID NUMBER DEFAULT SEQ_ROLE_ID.NEXTVAL);

我正在使用数据库的Hibernate和H2的4.0.1.Final版本。

0 个答案:

没有答案