我遇到了将序列映射到列默认值的问题 使用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版本。