我正在使用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);
答案 0 :(得分:3)
查看"Cascading life cycle"以了解级联是如何工作的。除非您手动分配ID,否则实体只会获得分配when it's saved的ID。如果您正在从“书籍”到“类别”级联保存,则保存书籍也会保存“类别”。没有级联,类别不会被保存,因此它没有id。