嵌入式。 H2 DB自动增量(Java测试用例)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式。 H2 DB自动增量(Java测试用例)相关的知识,希望对你有一定的参考价值。

我有一个Java Spring应用程序,它有一个MS SQL DB。对于DAO类的单元测试,我使用Embedded H2 DB将一些虚拟数据插入到H2 DB中。但我正在努力让自动生成主键工作。

这是创建模式/表/插入虚拟数据查询,它位于Spring项目目录的resources文件夹中的create.sql文件中:

CREATE SCHEMA local_db AUTHORIZATION sa; 
CREATE TABLE local_db.test_db (
  id int(4) NOT NULL AUTO_INCREMENT,
  username varchar(25) NOT NULL,
  isActive varchar(1) NOT NULL,
  PRIMARY KEY (id)
);

插入虚拟数据

INSERT INTO local_db.test_db VALUES (1,'TestDATA1','Y');
INSERT INTO local_db.test_db VALUES (2,'TestDATA2','Y');
INSERT INTO local_db.test_db VALUES (3,'TestDATA3','Y');

我的测试代码读取此create.sql文件,该文件正在使用虚拟数据正确创建模式/表。

这是在测试类setUp()中完成的

DaoClassUnderTest daoClassUnderTest;
  public void setUp() throws Exception {
    EmbeddedDatabase db = new EmbeddedDatabaseBuilder().
    setType(EmbeddedDatabaseType.H2).
    addScript("create.sql").
    build(); 
    daoClassUnderTest  = new DaoClassUnderTest(db);
  }

但是当我实际上在DAO类(正在测试)上调用insert方法时,它会插入数据,但它会将id字段保留为null,而不会在id列中插入任何值。

INSERT INTO local_db.test_db (username, isActive) VALUES (?,?);

如何从Junit测试代码中对Embedded.H2数据库进行自动增量处理?

答案

在我将create table query修改为。之后工作

CREATE TABLE local_db.test_db (
  id int(4) NOT NULL IDENTITY,
  username varchar(25) NOT NULL,
  isActive varchar(1) NOT NULL
);

以上是关于嵌入式。 H2 DB自动增量(Java测试用例)的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?

Liquibase:使用带 H2 数据库的 modifyDataType 重构将 INT 自动增量列更改为 BIGINT

如何像 sql server 一样在 h2 中使用 getDate()

如何使用 H2 嵌入式数据库创建 H2 内存数据库

使用 NetBeans IDE 在 Java DB 中创建自动增量键

Java和mySQL DB中的自动增量ID字段?