#hibernate #spring
#переход в режим гибернации #весна #spring
Вопрос:
Я работаю с Hibernate Spring и JSF
У меня возникает проблема, когда я использую отношения типа @OneToMany в режиме гибернации. Например:
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String description;
private String image;
private int numberOfPages;
private Date releaseDate;
private String title;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "category_id")
private Category category;
Когда я удаляю CascadeType.ВСЕ и сохраните книгу, содержащую категорию, идентификатор категории становится нулевым.
Кто-нибудь может помочь мне решить эту проблему?
Редактировать: Это мой модульный тест, который вызывает ошибку при восстановлении CascadeType.ALL
BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
Category category = new Category();
category.setTitle("Title");
Book book = new Book();
book.setCategory(category);
bookDao.save(book);
long id = book.getCategory().getId();
assertTrue(id > 0);
Комментарии:
1. Это категория, которую содержит книга, которая уже есть в базе данных?
2. это мой модульный тест, который вызывает ошибку при восстановлении CascadeType. ВСЕ BookDAO BookDAO = (BookDAO) ApplicationContext.getBean(«BookDAO»); Категория category = новая категория (); категория.setTitle(«Заголовок»); Книга book = новая книга(); book.setCategory(категория); BookDAO.save(книга); длинный идентификатор = книга.getCategory().getId(); assertTrue(id> 0);
3. Вы должны опубликовать дополнительный код, отредактировав свой вопрос, а не помещая его в комментарий. Я взял на себя смелость задать вам этот вопрос. Вы можете удалить этот комментарий.
Ответ №1:
Взгляните на «Каскадный жизненный цикл», чтобы понять, как работает каскадирование. Если вы не назначаете идентификаторы вручную, объект получает идентификатор, назначенный только при его сохранении. Если вы каскадируете сохранения из книги в категорию, то при сохранении Книги также сохраняется Категория. Без каскадирования Категория не сохраняется, и поэтому у нее нет идентификатора.