Java 列“ID”H2 Hibernate不允许为NULL

Java 列“ID”H2 Hibernate不允许为NULL,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我正在使用JavaEE和Wildfly 12。我有以下SQL表方案: CREATE TABLE AUTHOR ("ID" INTEGER primary key, "FIRSTNAME" VARCHAR(50) not null, "SECONDNAME" VARCHAR(50) not null); CREATE TABLE BOOK ("ID" INTEGER primary key, "TITLE" VARCHAR(50) not null, "AUTHOR" INTEGER, FOREI

我正在使用JavaEE和Wildfly 12。我有以下SQL表方案:

CREATE TABLE AUTHOR ("ID" INTEGER primary key, "FIRSTNAME" VARCHAR(50) not null, "SECONDNAME" VARCHAR(50) not null);
CREATE TABLE BOOK ("ID" INTEGER primary key, "TITLE" VARCHAR(50) not null, "AUTHOR" INTEGER, FOREIGN KEY ("AUTHOR") REFERENCES AUTHOR("ID"));
我要执行以下插入:

INSERT INTO AUTHOR("SECONDNAME","FIRSTNAME") values ('a', 'b');
INSERT INTO BOOK("TITLE","AUTHOR") values ('bookTitle', 1);
My persistence.xml:

<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="javax.persistence.schema-generation.create-source" value="script"/>
<property name="javax.persistence.schema-generation.drop-source" value="script"/>
<property name="javax.persistence.schema-generation.create-script-source" value="META-INF/create.sql"/>
<property name="javax.persistence.schema-generation.drop-script-source" value="META-INF/drop.sql"/>
<property name="javax.persistence.sql-load-script-source" value="META-INF/load.sql"/>
我尝试过所有的生成策略,自动、身份、顺序。正如我所说的,如果我在SQL中显式设置ID,SQL会工作,但在使用entityManager.persist时我会遇到同样的问题

@POST
@Path("/create")
public void createAuthor(Author author) {
    entityManager.persist(author);
}
所有这些都给了我:

Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ID"; SQL statement: ...

有什么帮助吗?

您只声明了列ID是整数和主键。您从未将列设置为自动递增,因此错误消息是正确的。将DDL更改为:

CREATE TABLE AUTHOR (
    "ID" INTEGER primary key auto_increment,
    "FIRSTNAME" VARCHAR(50) not null,
    "SECONDNAME" VARCHAR(50) not null
);

CREATE TABLE BOOK (
    "ID" INTEGER primary key auto_increment,
    "TITLE" VARCHAR(50) not null,
    "AUTHOR" INTEGER, FOREIGN KEY ("AUTHOR") REFERENCES AUTHOR("ID")
);

您只声明了列ID是整数和主键。您从未将列设置为自动递增,因此错误消息是正确的。将DDL更改为:

CREATE TABLE AUTHOR (
    "ID" INTEGER primary key auto_increment,
    "FIRSTNAME" VARCHAR(50) not null,
    "SECONDNAME" VARCHAR(50) not null
);

CREATE TABLE BOOK (
    "ID" INTEGER primary key auto_increment,
    "TITLE" VARCHAR(50) not null,
    "AUTHOR" INTEGER, FOREIGN KEY ("AUTHOR") REFERENCES AUTHOR("ID")
);