Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
10 Июл 2023
2 мин
887

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

Ошибка «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 все связанные объекты должны быть в «сохраненном» состоянии, то есть иметь уникальный идентификатор, прежде чем они могут быть использованы в других операциях.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий