在Hibernate中使用CascadeType

时间:2011-10-08 21:17:36

标签: hibernate spring

我正在使用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将变为空。

有人可以帮我解决这个问题吗?

编辑:这是我的单元测试,当我提醒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 个答案:

答案 0 :(得分:3)

查看"Cascading life cycle"以了解级联是如何工作的。除非您手动分配ID,否则实体只会获得分配when it's saved的ID。如果您正在从“书籍”到“类别”级联保存,则保存书籍也会保存“类别”。没有级联,类别不会被保存,因此它没有id。