首页 > 解决方案 > Hibernate / JPA 为什么多对多连接列 id 为假?

问题描述

像这样映射的多表:

简历.java:

 @ManyToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
        })
 @JsonIgnore
   @JoinTable(
           name = "resume_skills", 
           joinColumns = @JoinColumn(name = "skill_id"), 
           inverseJoinColumns = @JoinColumn(name = "resume_id"))
 private List<Skill> skills = new ArrayList<Skill>();


 public void addSkill(Skill skill) {
     skills.add(skill);
     skill.getResumes().add(this);
 }

技能.java

   @ManyToMany(mappedBy="skills")
   @JsonIgnore
   private List<Resume> resumes;

我这样做:

Resume resumeToAdd = new Resume(resume.getGithubAdress(),
            resume.getLinkedinAdress(),
            resume.getCoverLetter(),
            resume.getPicture(),
            employee
            );
    
    resumeDao.save(resumeToAdd);
    
    Skill skill = skillService.findById(1).getData();
    System.out.println(skill);
    resumeToAdd.addSkill(skill);
    resumeDao.save(resumeToAdd);

但是它发生了一个错误,例如它添加了一个 ID 为 60 的 Resume 并且它正在尝试添加一个技能 ID 为 60 的映射但它不能因为数据库中没有 ID 为 60 的技能,它应该是 1。我在这里错过了什么?

标签: javahibernatejpa

解决方案


看起来你混淆了映射的顺序。应该是这样的:

@JoinTable(
       name = "resume_skills", 
       joinColumns = @JoinColumn(name = "resume_id"), 
       inverseJoinColumns = @JoinColumn(name = "skill_id"))

推荐阅读