2011-10-08 107 views
2

我使用Hibernate + Spring和JSF在休眠中使用級聯類型

我在Hibernate中使用類似@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.ALL並保存包含類別的書籍時,類別Id變爲null。

任何人都可以幫助我解決這個問題嗎?

編輯:這是我的單元測試導致錯誤時,我remve 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); 
+0

這本書是否包含已經在數據庫中的類別? – millimoose

+0

這是我的單元testthat導致錯誤,當我remve cascadeType.ALL BookDao bookDao =(BookDao)applicationContext.getBean(「bookDao」); \t \t Category category = new Category(); \t \t category.setTitle(「Title」); \t \t Book book = new Book(); \t \t book.setCategory(category); \t \t bookDao.save(book); \t \t long id = book.getCategory()。getId(); \t \t assertTrue(id> 0); – user985813

+0

您應該通過編輯您的問題來發布其他代碼,而不是將其置於評論中。我冒昧地爲你解決問題。您可以刪除此評論。 –

回答

3

看一看"Cascading life cycle"瞭解如何級聯工程。除非您手動分配ID,否則實體只會獲得一個編號爲when it's saved的ID。如果您將書籍級聯保存到類別,則保存書籍也會保存該類別。沒有級聯,類別不會被保存,因此它沒有標識。

+0

非常感謝你:))) – user985813