В базе Н2, поле автоинкремент увеличивается на 32?
у меня есть эта простая таблица (только для теста):
create table table
(
key int not null primary key auto_increment,
name varchar(30)
);
затем я выполняю следующие запросы:
insert into table values ( null , 'one');// key=1
insert into table values ( null , 'two');// key=2
на этом этапе все идет хорошо, затем я закрываю консоль H2 и снова открываю ее и повторно выполняю этот запрос:
insert into table values ( null , 'three');// key=33
наконец, вот результаты:
Я не знаю, как решить эту проблему, если это реальная проблема... до получения ответа от автора...
2 ответов
база данных использует кэш 32 записей для последовательностей, и auto-increment внутренне реализована последовательность. Если система аварийно завершает работу без закрытия базы данных, не более этого числа теряются. Это похоже на то, как последовательности работают в других базах данных. В таких случаях не гарантируется, что значения последовательности будут генерироваться без пробелов.
Итак, вы действительно закрыли базу данных? Вы должны - это не технически проблема, если вы этого не сделаете, но закрытие база данных гарантирует, что такие странные вещи не произойдут. Я не могу воспроизвести проблему, если я обычно закрываю базу данных (остановите инструмент консоли H2). Закрытие всех подключений приведет к закрытию базы данных, и база данных будет закрыта, если приложение остановлено нормально (с помощью крючка выключения).
кстати, каков ваш точный URL базы данных? Кажется, вы используете jdbc:h2:tcp://...
но я не вижу остальную часть URL.
Не закрывайте терминал. Терминал является родительским процессом H2-tcp-сервера. Они не отстранены. Когда вы просто закрываете терминал, это процесс закрывает все дочерние процессы, что означает аварийное завершение работы сервера