java - 从双方保存多对多关系
问题描述
我在这个主题中找到了许多有趣的答案,但没有一个对我来说是正确的。
给定Job.java的一部分
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "company_employee",
joinColumns = @JoinColumn(name = "job_id"),
inverseJoinColumns = @JoinColumn(name = "employee_id"))
private Set<Employee> employees = new HashSet<>();
和Employee.java的一部分
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "company_employee",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "job_id"))
private Set<Job> jobs = new HashSet<>();
它怎么对双方都不起作用?
创建对象:
Job job = job.builder().build();
jobRepository.save(job);
Employee employee = Employee.builder().jobs(Sets.newSet(job));
employeeRepository.save(employee);
当我这样做时 - 只有一方保存了 ManyToMany,当测试员工有工作但工作没有任何员工时。Hibernate 不应该处理这个吗?
job.getEmployees = null;
employee.getJobs = { ...job... };
我需要从双方都这样做,所以当首先保存 Employee 时,您可以从 Job 端添加他。MappedBy,Cascade,我想我已经尝试了其中的大部分。另外-我尝试了额外的“添加”方法,但在这种情况下它不起作用,StackOverflowError ...
解决方案
您为同一个关系创建两个不同的表。
如果要创建双向多对多关系,只需创建一个表,并在第二个集合中使用@ManyToMany注释的“mappedBy”属性
@ManyToMany(mappedBy="employees", cascade = CascadeType.ALL)
private Set<Job> jobs = new HashSet<>();
欲了解更多信息,请查看这里
推荐阅读
- php - 使用php根据同页表单的输入动态输出html表格
- python - 单击tkinter中的按钮后小部件消失?
- c++ - 为什么使用 Xor 运算符在选择排序中交换对象不起作用?
- android - 关闭弹出的博览会应用程序后,无头服务停止工作
- c - 在 osx 上编译简单 C 程序时找不到标头错误
- rust - 如何在 Rust 中将所有运算符重载组合组合成一个特征?
- android - 字符串字节数据到字节数组
- python - 为什么 setattr 不影响返回值?
- r - 如何在 R 中获取表格,包括计数、相对频率和累积频率?
- quarkus - 在使用多阶段 Docker 构建的容器中构建本机可执行文件时内存不足