2014-10-20 75 views
0

我有兩個實體如下@OneToMany雙向關係:@OneToMany關係問題,節省了Hibernate的多個值和Spring

@Entity 
public class Company { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer companyId; 
    private String name; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="company") 
    Set<Employee> employees = new LinkedHashSet<>(); 

Employee類

@Entity 
public class Employee { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer empId; 
    private String name; 
    private String address; 
    private String email; 

    @ManyToOne 
    @JoinColumn(name="companyId") 
    Company company; 

Intially我下面保存的2名員工:

Employee emp= new Employee(); 
    emp.setName("John"); 
    emp.setEmail("[email protected]"); 
    employeeRepository.save(emp); 

    Employee emp2= new Employee(); 
    emp2.setName("Smith"); 
    emp2.setEmail("[email protected]"); 
    employeeRepository.save(emp2); 

Employee Table

現在我要救一個員工爲2個不同的公司工作的象下面這樣:

Company company =new Company(); 
    company.setName("Google"); 
    Employee emp = employeeRepository.findOne(1); 
    company.getEmployees().add(emp); 
    emp.setCompany(company); 
    companyRepository.save(company); 

    Company company2 =new Company(); 
    company2.setName("Microsoft"); 
    company2.getEmployees().add(emp); 
    emp.setCompany(company2); 
    companyRepository.save(company2); 

它更新僅次於公司ID爲employee表。我希望將這兩家公司分配給該員工。我怎樣才能做到這一點?

回答

2

這裏的問題是,你有一對多的時候,顯然它應該是一個多對多的,也就是說,一個員工可以爲多個公司工作,而一個公司有很多員工。

您可以將關係更改爲@ManyToMany(並根據需要使用@JoinTable),也可以創建另一個實體,比如EmployeeEmployee和Company和Company具有一對多關係。後一種方法可能是可取的,因爲你可以記錄關於關聯的附加信息,例如開始日期,結束日期等

@Entity 
@Table(name = "company_employees") 
public class CompanyEmployee { 

    @ManyToOne 
    private Employee employee; 

    @ManyToOne 
    private Company company; 

    private Date startDate; 

    private Date endDate; 

} 
+0

如果需要,我會建議帶JoinTable的ManyToMany – 2014-10-20 18:12:56