Запись не была сохранена, но автоматически увеличенный идентификатор в базе данных был увеличен - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть две таблицы для хранения ответов и HTML-шаблон формы. Таблица ответов имеет внешний ключ, который ссылается на первичный ключ в таблице html_templates. При попытке добавить запись в таблицу ответов возникает проблема.

//session opened
    Answers answers = new Answers();
    answers.setAnswer("answer...");
    //there is a record in getHtmlTemplates with 4 as an id
    answers.setHtmlTemplates(getHtmlTemplates(4));
    session.save(answers);

Программа выполняется без каких-либо ограничений, но в БД нет записей (MySql) Когда я добавляю запись в answers вручную, идентификатор увеличивается более чем на единицу. На самом деле, когда все операции внутри транзакции, запись добавляется. Что случилось? Похоже, база данных БД удалила эту запись.

1 Ответ

3 голосов
/ 16 сентября 2011

Вероятно, вы не совершаете транзакцию. Для столбцов с автоинкрементом, которые использует MySQL, метод save вызывает вставку фиктивной записи, чтобы Hibernate мог получить новое значение идентификатора (обратите внимание, что save возвращает объект, который является новым идентификатором). MySQL теперь пометил это значение как используемое, поэтому похоже, что идентификатор «перепрыгнул» при вставке вручную.

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