首页 > 解决方案 > 从双方保存多对多关系

问题描述

我在这个主题中找到了许多有趣的答案,但没有一个对我来说是正确的。

给定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 ...

标签: javaspringhibernatejpa

解决方案


您为同一个关系创建两个不同的表。

如果要创建双向多对多关系,只需创建一个表,并在第二个集合中使用@ManyToMany注释的“mappedBy”属性

     @ManyToMany(mappedBy="employees", cascade = CascadeType.ALL)
     private Set<Job> jobs = new HashSet<>();

欲了解更多信息,请查看这里


推荐阅读