package com.oa.model;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_orgnization")
public class Orgnization {

private int id;
private String name;
private Orgnization parent;
private Set<Orgnization> children = new HashSet<Orgnization>();
private String description;

@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="pid")
public Orgnization getParent() {
return parent;
}
public String getDescription() {
return description;
}
@OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
public Set<Orgnization> getChildren() {
return children;
} public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
} public void setDescription(String description) {
this.description = description;
}
public void setParent(Orgnization parent) {
this.parent = parent;
}
public void setChildren(Set<Orgnization> children) {
this.children = children;
}}
有o1,o2,o3,04四个对象,o2,o3,o4的parent都是o1,逻辑就这么简单!做的是一个树形结构,读取的时候正常,就是删除单条数据的时候会把全部数据都删了,怎样才能避免呢?

解决方案 »

  1.   

    cascade = nocascade好久没用了不知道有没有记错,不要设置级联删除就行,
      

  2.   

    cascade属性的可能值有
        all: 所有情况下均进行关联操作,即save-update和delete。
        none: 所有情况下均不进行关联操作。这是默认值。 
        save-update: 在执行save/update/saveOrUpdate时进行关联操作。 
        delete: 在执行delete 时进行关联操作。    all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点。比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个book时,此book即成为孤儿节点。像你的问题,设置成none就可以了,要不就都试试
      

  3.   

    问题解决了,谢谢各位了,其实只需在多方设置cascade=save-update就行了