首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@SQLDelete不传播到子表

@SQLDelete不传播到子表
EN

Stack Overflow用户
提问于 2016-04-01 18:07:41
回答 1查看 811关注 0票数 1

我想用Spring + hibernate实现软删除。假设我有一个material_group表,它与material_master表有一对多的关系。在mysql数据库中,如果存在子记录,则限制删除父记录。

在material_group和material_master实体中,我使用了以下内容

代码语言:javascript
复制
@SQLDelete(sql="update material_group set delete_ind='Y' where material_grp_id = ?")

代码语言:javascript
复制
@SQLDelete(sql="update material_master set delete_ind='Y' where material_id = ?")

我可以实现一个场景,即material_group可以软删除,如果有,没有材料。

但是,如果存在子记录,则要限制父文件的软删除。但是,它允许对父表进行软删除,而不对子条目进行任何更改。对于实现这个用例,任何想法都是值得赞赏的。(规划方法是我最后的选择)

下面给出了代码片段

material_group表

代码语言:javascript
复制
    @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表

代码语言:javascript
复制
    @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;
    }
EN

回答 1

Stack Overflow用户

发布于 2019-05-30 12:11:25

在父对象中,添加以下内容:

代码语言:javascript
复制
@OneToMany(cascade = CascadeType.ALL, targetEntity = MaterialGroup.class)
@JoinColumn(name = "YOUR_FOREIGN_KEY_COLUMN", nullable = false, 
insertable = false)
private Set<MaterialMaster> materialMaster = new HashSet<MaterialMaster> 
();

在那之后,如果其他规格是正确的,它应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36363034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档