冬眠。不链接多对多关联

Posted

技术标签:

【中文标题】冬眠。不链接多对多关联【英文标题】:hibernate. doesn't link in many to many association 【发布时间】:2013-09-10 14:23:09 【问题描述】:

我有候选和空缺实体(多对多注释)。

在候选映射中:

@ManyToMany(mappedBy = "candidates", fetch = FetchType.EAGER)
    @XmlTransient
    public Set<Vacancy> getVacancies() 
        return vacancies;
    

在空缺映射中:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "vacancy_candidate", joinColumns = @JoinColumn(name = "vacancy_id"), inverseJoinColumns = @JoinColumn(name = "candidate_id"))
    public Set<Candidate> getCandidates() 
        return candidates;
    

调用代码:

@RequestMapping("/saveCandidate")
    public String saveCandidate(Model model,HttpServletRequest request,HttpResponse response
            ,@ModelAttribute("candidateFromRequest") Candidate candidateFromRequest
            ,@ModelAttribute("skillsIdList") Set<Skill> skills
           ,@ModelAttribute("vacanciesForCandidate") Set<Vacancy> vacanciesForCandidate
           ,RedirectAttributes redirectAttributes
            )
    
        candidateFromRequest.setSkills(skills);
        candidateFromRequest.setVacancies(vacanciesForCandidate);//In debug I saw that here exist vacancy
        for(Vacancy vacancy:vacanciesForCandidate)
            vacancy.getCandidates().add(candidateFromRequest);
        
        candidateService.update(candidateFromRequest);//invoke  session.update();
        redirectAttributes.addAttribute("message", "Submitted Correctly");
        redirectAttributes.addAttribute("id",candidateFromRequest.getId());
        return "redirect:loadCandidateById";
     

但在此事务之后,数据库中确实存在遗漏的注释。为什么?

【问题讨论】:

您能粘贴此操作的 SQL 信息吗?有什么事吗? 只更新候选表 【参考方案1】:

如果您想以这种方式保存,则必须更改映射。现在,Vacancy 拥有方,Candidate 拥有。

在您的情况下,您使用的是CascadeType.ALL,所以它应该可以工作。

【讨论】:

以上是关于冬眠。不链接多对多关联的主要内容,如果未能解决你的问题,请参考以下文章

UML类图详解_关联关系_多对多

Flask SQLAlchemy 多对多关联对象错误

Spring boot - 多对多关联不删除连接表数据

Hibernate之关于多对多单向关联映射

删除 Ecto 中的关联(多对多)

SQLAlchemy 使用关联配置与自我的多对多关系