Сброс автоинкремента в h2

Я тестирую контроллер, который возвращает ответ json, но тесты не проходят после первого раза, потому что база данных h2 не сбрасывает идентификатор автоматического увеличения. Использование фикстур или создание объектов вручную имеет ту же проблему.

@Before
public void setUp() {
    Fixtures.deleteAllModels();
    Fixtures.loadModels("data.yaml");
}

Как решить эту проблему?


person marsellvov    schedule 08.04.2012    source источник


Ответы (3)


Запустите приложение для воспроизведения, запустите браузер с этим URL-адресом (если вы запускаете приложение для воспроизведения локально):

http://localhost:9000/@db

Введите базу данных h2, введите команду ниже и запустите:

ALTER TABLE <table_name> ALTER COLUMN <column_name> RESTART WITH 1

Если вы хотите сделать это программно, Fixtures.executeSQL() может быть полезно

Для получения дополнительной информации посетите http://www.h2database.com/html/grammar.html#alter_table_alter.

person dwi2    schedule 09.04.2012

Если вы используете Spring, я нашел это сообщение в блоге, в котором предлагается использовать @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

Так что каждый тест использует новый контекст приложения, тем самым сбрасывая приращения db.

person Benjamin Slabbert    schedule 28.07.2017
comment
Это сделает тесты очень медленными - person avmohan; 14.03.2018

Выполните SQL-скрипт на вашей таблице:

TRUNCATE TABLE my_table RESTART IDENTITY;
ALTER SEQUENCE my_table_id_seq RESTART WITH 1;

H2 должен быть версии 1.4.200 или выше.

См. https://www.h2database.com/html/commands.html.

person Zon    schedule 08.06.2020