2015-04-29 176 views
1

我想使用OneToMany和ManyToOne做一個關係,但是當我嘗試插入一個記錄到數據庫中而沒有在列表OneToMany中添加一個對象(類)時,hibernate嘗試插入記錄無論如何OneToMany。例如: Employee類:錯誤休眠OneToMany/ManyToOne

@Entity 
public class Employee implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="employee") 
    private List<Shift> shifts = new ArrayList<Shift>(); 
} 

轉移類:

@Entity 
public class Shift implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) 
    @JoinColumn(name="EMPLOYEE_ID") 
    private Employee employee; 
} 

當我嘗試插入記錄:

Employee employee = new Employee(); 
entityManager.persist(employee); 
entityManager.flush(); 

我怎樣才能解決呢?我正在使用SQL Server數據庫。

14:53:49,660 INFO [stdout] (default task-20) Hibernate: insert into Employee 
14:53:49,762 INFO [stdout] (default task-20) Hibernate: insert into Shift(EMPLOYEE_ID) values (?) 

回答

2

按我的理解,這是因爲你已經在Employee類指定cascade = CascadeType.ALL

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="employee") 
    private List<Shift> shifts = new ArrayList<Shift>(); 

這意味着,當你將作出Employee對象的任何操作,系統將其級聯到Shift類也緣於此。

對於請參閱這裏: - CascadeType

+0

你有什麼建議?由於Hibernate在EMPLOYEE_ID列中返回空值,並且列表的大小爲0,因爲我沒有添加Shift對象,並且當我添加一個Shift對象時,Hibernate嘗試在表中插入兩條記錄Shift而不是一個。 –

+0

它不應在Shift表中爲EMPLOYEE_ID列創建空值。關於你的第二點,請發佈你的代碼herr(更新你的問題) – RE350