Hibernate无法在多对多关联中建立链接。

3
我可以帮您进行翻译。这段文字的意思是:“我有候选人和空缺实体(多对多注释)。”在候选人映射中:”。
@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信息吗?会发生什么事情吗? - paulek
仅更新候选人表。 - user2740224
1个回答

0
如果您想以这种方式保存,您需要更改映射。现在,Vacancy 是拥有方,而Candidate是被拥有的。
在您的情况下,您正在使用CascadeType.ALL,所以它应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接