как дескриптор приращения генератора гибернации удаляет - PullRequest
2 голосов
/ 13 июля 2011

Вот как я использую генератор:

    <id name="id" column="column_name">
        <generator class="increment"/>
    </id>

private Integer id;

Я вижу следующее поведение:

  1. создание первого объекта
  2. Hibernate назначаетid = 1
  3. удалить этот объект
  4. выключить сервер и перезапустить его (добавив это после ответа)
  5. создать второй объект
  6. назначает Hibernateid = 1

примечание: я ожидал, что новый номер будет равен 2, хотя 1 больше не существует.

Я проверял это только с помощью HSQLDB.

Вопрос: это ожидаемое поведение?

AFAICT в источнике, следующее число должно быть 2 https://github.com/hibernate/hibernate-core/blob/master/hibernate-core/src/main/java/org/hibernate/id/IncrementGenerator.java#L68

Обновление: Согласно ответу Ральфа, если я пропущу шаг4 (не выключать сервер), он увеличивается правильно.Это потому, что при запуске устанавливается значение max (id) и после этого сохраняется в памяти.

1 Ответ

3 голосов
/ 13 июля 2011

IncrementGenerator инициализируется с "select max(" + column + ") from " + buf.toString();, где column - столбец идентификатора.

Это означает, что каждый раз, когда создается новый IncrementGenerator (точнее: в первый раз generate вызывается после configure) счетчик идентификатора будет «сброшен» до максимального значения из БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...