2015-03-25 87 views
0
public class Job { 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @ManyToMany 
    @JoinTable(
      name = "t_job_t_user", 
      joinColumns = @JoinColumn(name = "job_id"), 
      inverseJoinColumns = @JoinColumn(name = "user_id")) 
    private List<User> operator = new ArrayList<User>(); 

} 

public class User { 
    @Id 
    @GeneratedValue 
    private int id; 

    //have no reference to Job 
} 

現在我不能刪除User對象,因爲我會得到異常:Hibernate的級聯設置爲many2many關係

Cannot delete or update a parent row: a foreign key constraint fails ....

似乎這是由兩個實體之間的關係造成的。

我想知道如何解決這個問題?


爲什麼我避免在User添加引用是:

1有沒有需要知道的用戶邏輯的角度來工作。

2查詢運算符時避免級聯查詢。

回答

0

你應該在用戶類中添加一個參考:

@ManyToMany(mappedBy="operator") 
private List<Job> job; 

現在你可以添加cascade=CascadeType.REMOVE@ManyToMany註釋(如果其他用戶正在引用的工作這可能會導致更多的問題),或者你必須在刪除用戶之前,請小心刪除受影響的作業中的用戶引用:

public void delete(User user) { 
    for (Job job : user.getJobs()) { 
     job.getOperator().remove(user); 
    } 
    user.getJobs().clear(); 
    entityManager.remove(user); 
}