我对这样一个直截了当的主题有疑问(我认为这不是一个问题,但实际上DB / persistens不是我最喜欢的一个)。
考虑以下类:
Class Parent {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", fetch = FetchType.EAGER, orphanRemoval = true)
public List<Child> getChilds() {..}
}
Class Child {
@ManyToOne
public getParent(){..}
@OneToMany(cascade = CascadeType.ALL, mappedBy = "child", fetch = FetchType.EAGER, orphanRemoval = true)
public List<GrandChild> getGrandChilds() {..}
}
Class GrandChild {
@ManyToOne
public getChild(){..}
}
现在在initservice:
Parent p = new Parent();
List<Child> cl = new ArrayList<Child>();
Child c1 = new Child();
c1.setParent(p);
List<GrandChild> gcl1 = new ArrayList<GrandChild>();
c1.setGrandChilds(gcl1);
Child c2 = new Child();
c2.setParent(p);
List<GrandChild> gcl2 = new ArrayList<GrandChild>();
GrandChild gc1 = new GrandChild();
gc1.setChild(c2);
gcl2.add(gc1);
GrandChild gc2 = new GrandChild();
gc2.setChild(c2);
gcl2.add(gc2);
c2.setGrandChilds(gcl2);
cl.add(c1);
cl.add(c2);
p.setChilds(cl);
Parent tmp1 = parentDao.save(p);
tmp1 包含2个元素的子列表(c1和c2)
但是如果我从DAO获得父级,那么列表(实际上它是一个包?!)包含3个元素! (c1,c2,c2)
我缺少什么?我是否必须更改孩子的CascadeType,实际上我真的不了解Cascadetypes。
编辑: 在DB中它看起来应该是。
1家长
2名父母1的孩子
有同一个孩子的2个孙子
EDIT2 :删除了不相关的代码行:
gcl2.add(new GrandChild());