Java @使用H2数据库时无法识别DynamicSert

Java @使用H2数据库时无法识别DynamicSert,java,spring,hibernate,h2,Java,Spring,Hibernate,H2,我有一个Spring启动应用程序。我使用Postgres数据库,并希望交替使用H2数据库 我的sql模式如下所示 CREATE SEQUENCE car_id_seq START WITH 100; CREATE TABLE car ( id INTEGER DEFAULT nextval('car_id_seq') PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, content VARCHAR NOT NULL );

我有一个Spring启动应用程序。我使用Postgres数据库,并希望交替使用H2数据库

我的sql模式如下所示

CREATE SEQUENCE car_id_seq START WITH 100;
CREATE TABLE car (
  id      INTEGER  DEFAULT nextval('car_id_seq')  PRIMARY KEY,
  name    VARCHAR  NOT NULL  UNIQUE,
  content  VARCHAR  NOT NULL
);
@Entity @DynamicInsert @DynamicUpdate
@Getter @Setter //lombok
public class Car {
    @Column @Access(AccessType.PROPERTY)
    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column private String name;
    @Column private String content;
}
我的车看起来像这样

CREATE SEQUENCE car_id_seq START WITH 100;
CREATE TABLE car (
  id      INTEGER  DEFAULT nextval('car_id_seq')  PRIMARY KEY,
  name    VARCHAR  NOT NULL  UNIQUE,
  content  VARCHAR  NOT NULL
);
@Entity @DynamicInsert @DynamicUpdate
@Getter @Setter //lombok
public class Car {
    @Column @Access(AccessType.PROPERTY)
    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column private String name;
    @Column private String content;
}
现在我尝试持久化一个实例。使用Postgres Db一切正常。关键是必须在不传递id值的情况下调用insert语句。启用日志后,我可以看到此语句
insert into Car(名称、内容)值(?,)

现在,当我切换到H2时,我非常惊讶地看到完全相同的代码生成以下sql语句
insert-into-Car(name,content,id)值(?,null)
。在这里,id通过值
null
传递。这当然会导致列“ID”不允许出现
NULL;SQL语句
-异常

为什么会有不同的行为,以及如何修复@DynamicInsert(和@DynamicUpdate)正在工作


PostgreSQL 9.5.3,com.h2数据库:h2:1.4.193,Spring Boot 1.4.2.RELEASE,Hibernate 5.0.11。最终版

调试Hibernate时,我意识到
@DynamicInsert
在标识符列中没有任何作用

重要的区别在于电话

dialect.getIdentityColumnSupport().getIdentityInsertString()
这里PostgresDialect返回
null
,H2方言返回
“null”
。我将H2扩展到并返回了
null
。对于我的用例,现在一切都正常了

也许有人能告诉我,背景是什么