[英]Saving Many-To-Many relations from both sides
我在這個問題上發現了許多有趣的答案,但其中沒有一個對我來說是正確的。
給定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);
按照我的方式,當測試的Employee有工作,但Job沒有任何Employee時,只有一側保存了ManyToMany。 休眠不應該照顧這個嗎?
job.getEmployees = null;
employee.getJobs = { ...job... };
我需要從兩側進行此操作,因此當首先保存Employee時,可以從Job端添加他。 通過,Cascade,我想我已經嘗試了其中的大多數。 另外-我嘗試了額外的“添加”方法,但在這種情況下無法正常工作,StackOverflowError ...
您為同一關系創建兩個不同的表。
如果要創建雙向ManyToMany關系,只需創建一個表,然后使用第二個集合,使用@ManyToMany批注的“ mappedBy”屬性
@ManyToMany(mappedBy="employees", cascade = CascadeType.ALL)
private Set<Job> jobs = new HashSet<>();
欲了解更多信息,請點擊這里
當添加注解@JoinTable時,您要告訴hibernate在2個實體之間創建一個聯結表。 雙方加總意味着雙重定義。 為什么這樣不好? 如果您有2種不同的定義,那么冬眠應該選擇哪一種?
您不必先保存工作,然后再保存員工,如果他們可以選擇級聯,則休眠將為您完成。
如何解決空問題? 如果您具有多對多關系,則意味着您具有雙向關系,並且它們之間應該相互引用。
employee.getJobs().add(job);
job.getEmployees().add(employee);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.