Hibernate ManyToMany 删除两个实体的关联

在我的工程中,有这么两个实体:GrowthDiary.java(成长日记)和DiaryTag.java(日记标签)。

大概就是和csdn发表文章给文章打标签一个意思吧。

现在我想在后台管理平台删除一个标签,但是这个标签已经有日记使用了,那么我就需要先删除标签和日记的关联。

原本我是这样写的:

@RequestMapping(value = "/delete", method = RequestMethod.POST)
    public @ResponseBody
    Message delete(Long[] ids)
    {
        for(Long id:ids){
            DiaryTag diaryTag = diaryTagService.find(id);
            if(diaryTag!=null){
                diaryTag.setGrowthDiaries(null);
                diaryTagService.update(diaryTag);
                diaryTagService.delete(diaryTag);
            }
        }
        return SUCCESS_MESSAGE;
    }

看方法体里面就好,我想先将标签里面的日记置空,更新标签,再删除,然而这样写并没有什么卵用。

貌似我们一直没有看看这两个类,看看这两个实体是怎么关联的:

GrowthDiary.java:
/** 日志标签 */
    private Set<DiaryTag> diaryTags = new HashSet<DiaryTag>();


/**
     * 
     * @return
     * @see [类、类#方法、类#成员]
     */
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "t_pe_growth_diary_tag")
    @OrderBy("createDate asc")
    public Set<DiaryTag> getDiaryTags()
    {
        return diaryTags;
    }

    /**
     * @param 对diaryTags进行赋值
     */
    public void setDiaryTags(Set<DiaryTag> diaryTags)
    {
        this.diaryTags = diaryTags;
    }

DiaryTag.java
/** 日志标签 */
    private Set<GrowthDiary> growthDiaries = new HashSet<GrowthDiary>();

 /**
     * @return 返回 growthDiaries
     */
    @ManyToMany(mappedBy = "diaryTags", fetch = FetchType.LAZY)
    public Set<GrowthDiary> getGrowthDiaries()
    {
        return growthDiaries;
    }

    /**
     * @param 对growthDiaries进行赋值
     */
    public void setGrowthDiaries(Set<GrowthDiary> growthDiaries)
    {
        this.growthDiaries = growthDiaries;
    }

看到了吧,这两张表的GrowthDiary.java里面通过 @JoinTable (name = "t_pe_growth_diary_tag" 关联的。所有这个实体才是维护这两个实体联系的主人。那么我们就需要从GrowthDiary开始动手,下面就简单了,我的代码:
@RequestMapping(value = "/delete", method = RequestMethod.POST)
    public @ResponseBody
    Message delete(Long[] ids)
    {
        for (Long id : ids)
        {
            DiaryTag diaryTag = diaryTagService.find(id);
            if (diaryTag != null)
            {
                List<GrowthDiary> growthDiaries = growthDiaryService.findByDiaryTag(diaryTag);
                if (growthDiaries != null && growthDiaries.size() > 0)
                {
                    for (GrowthDiary growthDiary : growthDiaries)
                    {
                        growthDiary.getDiaryTags().remove(diaryTag);
                        growthDiaryService.update(growthDiary);
                    }
                }
                diaryTagService.delete(diaryTag);
            }
        }
        return SUCCESS_MESSAGE;
    }
参考文章:http://blog.csdn.net/remote_roamer/article/details/5690341

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值