java - 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。我在这里错过了什么?
解决方案
看起来你混淆了映射的顺序。应该是这样的:
@JoinTable(
name = "resume_skills",
joinColumns = @JoinColumn(name = "resume_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id"))
推荐阅读
- sql-server - SQL Server 崩溃
- iis - .NET Core WebAPI IIS 部署
- git - git push -u origin master 命令未反映 github 上的更改
- html - Oracle Virtualbox 网络 SPAN/镜像端口
- javascript - 为什么我的 if & else 条件不能正常工作?
- java - 将json字符串反序列化为具有杰克逊字符串属性的对象
- python - 带有 sqlalchemy 的 Flask 应用程序尝试使用 Flask-APScheduler 安排作业
- python - 如何计算子串中元音的数量?
- moodle - 从 mform 获取循环文本值
- mysql - 有条件地删除mysql中的最后一行