这里小编是用注解cascade = CascadeType.ALL配的
下面是我做的一个ext的edittree中,一个删除操作, 下面是用到的模型, 当然只保留了一部分字段。
(数据中是没有children字段的。这部分不用管,这只是edittree中需要的。)
注意:当在action中删出的时候,一定要用hibernate自带的事物执行语句才能执行级联删除,否则是不会实现级联删除的。
/**
*模型
/
public class ProjectPlanBaseinfo implements Serializable {
private static final long serialVersionUID = 1L;
@ColumnCNName("主键")
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false, precision=19)
private Long id;
@Temporal( TemporalType.DATE)
@Column(name="OPERATE_TIME")
private Date operateTime;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID")
private ProjectPlanBaseinfo parent;
@Column(name = "THE_SORT")
private Integer theSort;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "parent")
@Fetch(FetchMode.JOIN)
@BatchSize(size=300)
@OrderBy(" theSort asc")
//下边的缓存注解应该去掉,
//如果不去掉的话,新增子节点后,刷新不会查询子节点
//@Cache(usage = //CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<ProjectPlanBaseinfo> children = new HashSet<ProjectPlanBaseinfo>(0);
public ProjectPlanBaseinfo() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@JSON(format="yyyy-MM-dd")
public Date getOperateTime() {
return this.operateTime;
}
public void setOperateTime(Date operateTime) {
this.operateTime = operateTime;
}
public ProjectPlanBaseinfo getParent() {
return parent;
}
public void setParent(ProjectPlanBaseinfo parent) {
this.parent = parent;
}
public Set<ProjectPlanBaseinfo> getChildren() {
return children;
}
public void setChildren(Set<ProjectPlanBaseinfo> children) {
this.children = children;
}
}