2011-10-08 47 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