我想使用Spring JPA + hibernate实现软删除。假设我有一个material_group表,它与material_master表有一对多的关系。在我的mysql数据库中,如果存在子记录,我已限制删除父记录。
在material_group和material_master实体中我使用了以下
@SQLDelete(sql="update material_group set delete_ind='Y' where material_grp_id = ?")
和
@SQLDelete(sql="update material_master set delete_ind='Y' where material_id = ?")
我可以实现一种方案,即如果有 NO 材料,可以软删除material_group。
但是如果存在子记录,我想限制父删除。但是,允许软表删除父表而不更改子条目。任何想法都可以实现这个用例。 (程序化方法是我的最后选择)
下面给出了代码段 material_group表
@Entity
@Table(name="material_group")
@NamedQuery(name="MaterialGroup.findAll", query="SELECT m FROM MaterialGroup m")
@SQLDelete(sql="update material_group set delete_ind='Y' where material_grp_id = ?")
@Where(clause="delete_ind is NULL")
public class MaterialGroup implements Serializable {
@OneToMany(mappedBy="materialGroup", fetch = FetchType.LAZY, cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
@Where(clause="delete_ind is NULL")
private List<MaterialMaster> materialMasters;
}
material_master表
@Entity
@Table(name="material_master")
@NamedQuery(name="MaterialMaster.findAll", query="SELECT m FROM MaterialMaster m")
@SQLDelete(sql="update material_master set delete_ind='Y' where material_id = ?")
@Where(clause="delete_ind is NULL")
public class MaterialMaster implements Serializable {
//bi-directional many-to-one association to MaterialGroup
@ManyToOne
@JoinColumn(name="material_grp_id")
private MaterialGroup materialGroup;
}
答案 0 :(得分:0)
在您的父对象中,添加以下内容:
@OneToMany(cascade = CascadeType.ALL, targetEntity = MaterialGroup.class)
@JoinColumn(name = "YOUR_FOREIGN_KEY_COLUMN", nullable = false,
insertable = false)
private Set<MaterialMaster> materialMaster = new HashSet<MaterialMaster>
();
之后,如果其他规格正确,它应该可以工作。