Eug*_*neP 2 java orm hibernate cascade
表SUBCOURSE引用COURSE COURSE(id,name)SUBCOURSE(id,course_id,name)
所以,1:M.
Hibernate为课程生成:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "course", cascade = CascadeType.ALL)
public Set getSubCourses() {
return this.subCourses;
}
对于它产生的子课程
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "course_id", nullable = false)
public Course getCourse() {
return this.course;
}
现在问题是级联不能按预期工作.我想创建一个SubCourse对象集合(Set),填充它然后将它绑定到Course对象的setSubCourses().然后只需保留Course对象即可.
虽然,在Subcourses表中有ManyToOne的东西,我需要在添加到每个对象的集合之前手动setCourse().如果我不这样做,则在使用其集合持久化Course对象时会引发异常.
你能推荐我什么?
PS或者这可能是游戏的一部分?手动设置每个孩子的父对象?
这似乎是游戏的一部分.来自Hibernate书籍的引用(指的Item是父亲和Bid孩子的例子):
如果你只打电话
anItem.getBids().add(bid),没有任何变化是持久的!只有aBid.setItem(anItem)正确设置了另一面,才能得到你想要的东西.这与没有Hibernate的Java中的行为一致:如果关联是双向的,则必须在两侧创建带有指针的链接,而不仅仅是一个.这是我们推荐便利方法的主要原因addBid()- 它们在没有容器管理关系的情况下处理系统中的双向引用.
上面提到的课程是
public class Item {
...
private Set bids = new HashSet();
public void setBids(Set bids) {
this.bids = bids;
}
public Set getBids() {
return bids;
}
public void addBid(Bid bid) {
bid.setItem(this);
bids.add(bid);
}
...
}
Run Code Online (Sandbox Code Playgroud)