Java 当Hibernate实体具有GenerationType.sequence时,如何使用sequence作为默认值将测试数据插入H2

Java 当Hibernate实体具有GenerationType.sequence时,如何使用sequence作为默认值将测试数据插入H2,java,hibernate,unit-testing,h2,Java,Hibernate,Unit Testing,H2,使用GenerationType.IDENTITY映射实体时,h2测试数据库中的sql插入将具有指向序列的id列的默认值。当使用GenerationType.SEQUENCE映射时,它将没有默认值 我们希望使用GenerationType.SEQUENCE,因为它更详细,并且我们希望显示所有内容的来源。在测试过程中,我们偶然发现了这个问题-当使用@Sql将脚本插入嵌入式h2数据库时,我们会得到一个关于NOTNULL约束的错误。当我们只是将脚本作为本机查询执行时,也会发生这种情况 使用Genera

使用GenerationType.IDENTITY映射实体时,h2测试数据库中的sql插入将具有指向序列的id列的默认值。当使用GenerationType.SEQUENCE映射时,它将没有默认值

我们希望使用GenerationType.SEQUENCE,因为它更详细,并且我们希望显示所有内容的来源。在测试过程中,我们偶然发现了这个问题-当使用@Sql将脚本插入嵌入式h2数据库时,我们会得到一个关于NOTNULL约束的错误。当我们只是将脚本作为本机查询执行时,也会发生这种情况

使用GenerationType.IDENTITY时不会发生这种情况。上面的相同脚本可以正常工作

如果我们使用GenerationType.SEQUENCE并通过调用下一个值函数传递id,如下所示:

INSERT INTO example (id, name) (NEXTVAL('example_id_seq'), 'test');
脚本将毫无问题地工作

下面是一个映射发生问题的插入的示例:

@Entity
@Table(schema = DbSchemas.PUBLIC, name = DbTables.Example)
public class Example implements Serializable {
    private static final long serialVersionUID = -8827852720381659873L;

private static final String EXAMPLE_GENERATOR = "example_generator";

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = EXAMPLE_GENERATOR)
@SequenceGenerator(name = EXAMPLE_GENERATOR, sequenceName = DbSequences.EXAMPLE_ID_SEQUENCE, allocationSize = 1)
private Integer id;

@Column(name = "name", nullable = false)
private String name;

}



我希望能够为使用GenerationType.SEQUENCE映射的实体调用上面显示的插入。插入必须使用并递增映射中描述的序列。

否,示例\u生成器只是生成器的名称,在@SequenceGenerator中定义实际序列的名称是示例\u id\u seq。这是示例_generatorrgr,sry的一个属性,忘记我的注释+1,同样的问题。我希望hibernate为ID列生成DDL作为默认的mysequence.nextval。我怎样才能做到这一点?
INSERT INTO public.example (name) 
VALUES ('test');
o.h.engine.jdbc.spi.SqlExceptionHelper   : NULL not allowed for column "ID"; SQL statement: