Исправление ошибки Hibernate «object references an unsaved transient instance — save the transient instance before flushing»

Перейти в телеграм, чтобы получить результаты теста
Пройдите тест, узнайте какой профессии подходите
Вам подходит профессия:
Аналитик данных
Основные характеристики профессии:
не нужно общаться с людьми
логика
анализ
поиск закономерностей
работа с числами
Построим личный план перехода в профессию для вас бесплатно
- убедитесь, подходит вам профессия или нет
- получите оценку своих навыков и шансов освоить профессию
- забронируем за вами скидку 55% на обучение, пока думаете
Позвоним вам в течение часа — не пропустите звонок
Чем занимается специалист
Специалист создает все онлайн-продукты, программы, приложения, игры и сайты, которыми вы пользуетесь каждый день.
Создает — значит описывает последовательность действий на специальном языке программирования. Настраивает действия, что должно произойти, если пользователь нажмет на кнопку.
Средняя зарплата начинающего специалиста в первый год работы:
от 50 000 ₽
Что надо знать и уметь, чтобы выучиться на аналитика:
- базовое школьное образование
- уверенные навыки работы с компьютером
- опыт выполнения задач в конкретные сроки
Глубокие знания математики или английского не нужны
Почему мы рекомендуем вам эту профессию
Ваш скрытый талант:
наблюдательность
Ошибка «object references an unsaved transient instance — save the transient instance before flushing» в Hibernate обычно возникает, когда есть связанный объект, которому не было присвоено
Ошибка «object references an unsaved transient instance — save the transient instance before flushing» в Hibernate обычно возникает, когда есть связанный объект, которому не было присвоено уникальное значение идентификатора, и этот объект пытаются использовать до его сохранения.
Рассмотрим типичный пример. Имеется сущность Book
, у которой есть связанный объект Author
:
public class Book {
private Long id;
private String title;
private Author author;
//геттеры, сеттеры...
}
public class Author {
private Long id;
private String name;
//геттеры, сеттеры...
}
При попытке сохранить книгу с новым автором, который еще не был сохранен в базе данных, возникает указанная ошибка:
Author author = new Author();
author.setName("New Author");
Book book = new Book();
book.setTitle("New Book");
book.setAuthor(author);
session.save(book); //ошибка
Чтобы исправить данную проблему, необходимо сначала сохранить связанный объект Author
, а затем объект Book
:
Author author = new Author();
author.setName("New Author");
session.save(author); //сначала сохраняем автора
Book book = new Book();
book.setTitle("New Book");
book.setAuthor(author);
session.save(book); //теперь сохраняем книгу
Теперь Hibernate знает идентификатор Author
, и книга успешно сохраняется.
Важно помнить, что при выполнении операций с базой данных в Hibernate все связанные объекты должны быть в «сохраненном» состоянии, то есть иметь уникальный идентификатор, прежде чем они могут быть использованы в других операциях.
Добавить комментарий