Nëse një objekt prind fillon me një listë prej 3 objektesh fëmijë, heq fëmijën 1 dhe thërret session.update(prind), çfarë lloj hartash hibernate do të më duhej për të pastruar PK-në e prindit nga tabela e hequr e fëmijëve pa fshirë atë të hequr fëmijë plotësisht?
Kam gjithashtu një kufizim që parandalon fshirjen e çdo prindi nëse atij i caktohet ndonjë fëmijë dhe një kufizim tjetër që më pengon të fshij aksidentalisht çdo hyrje të fëmijës.
Mund t'i përditësoj me sukses fëmijët duke thirrur thjesht session.update(prind), por kam vështirësi të bëj të kundërtën.
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private List<Child> children;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToMany(mappedBy = "parent")
@org.hibernate.annotations.Cascade(
value = {org.hibernate.annotations.CascadeType.SAVE_UPDATE})
public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children){
this.children = children;
for(Child child : children) {
child.setParent(this);
}
}
//----------------- Would I need something like this? ---------------
//----------------- Or does hibernate have a better way? ---------------
public void setChildren(List<Child> children){
for(Child child : this.children)
if (!children.contains(child)) {
child.setParent(null);
}
}
this.children = children;
for(Child child : children) {
child.setParent(this);
}
}
//----------------------------------------------------------------
}
public class Child implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Parent parent;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
Kjo zgjidhje është e ngjashme, por unë nuk po fshij prindin, përkundrazi po heq një fëmijë nga lista: