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



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