Использование CascadeType в Hibernate - PullRequest
2 голосов
/ 09 октября 2011

Я работаю с Hibernate + Spring и JSF

У меня проблема при использовании таких отношений, как @OneTomany в Hibernate. Например:

@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.ALL и сохраняю книгу, содержащую категорию, идентификатор категории становится пустым.

Может кто-нибудь помочь мне решить эту проблему?

Редактировать: Это мой модульный тест, который вызывает ошибку, когда я получаю 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 Ответ

3 голосов
/ 09 октября 2011

Взгляните на «Каскадный жизненный цикл» , чтобы понять, как работает каскадирование. Если вы не назначаете идентификаторы вручную, объект получает идентификатор, назначенный , только когда он сохранен . Если вы каскадно сохраняете из книги в категорию, то сохранение книги также сохраняет категорию. Без каскадирования Категория не сохраняется, поэтому у нее нет идентификатора.

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