2012-07-26 85 views
3

我有兩個類:EmployeeAward,具有多對多的關係。休眠多對多關聯刪除錯誤

當試圖刪除我得到一個約束違規錯誤。我瀏覽了所有帖子,但都沒有幫助。

這是代碼:

@Entity 
@Table(name="TB_AWARD") 
public class Award implements Serializable{ 


    @Id @GeneratedValue 
    @Column(name="AWARD_ID") 
    private long awardId; 

    @ManyToMany(mappedBy="awards") 
    @NotFound(action=NotFoundAction.IGNORE) 
    private Collection<Employee> employee = new ArrayList<Employee>(); 

    @Column(name="AWARD_TYPE") 
    private String awardType; 

    @Column(name="AWARD_DATE") 
    private Date awardDate; 

    @Column(name="AWARD_DETAILS") 
    @Lob 
    private String awardDetails; 

    @Column(name="REMARK") 
    private String remark; 

@Entity 
@Table(name="TB_EMPLOYEE") 
public class Employee implements Serializable { 

    @Id @GeneratedValue 
    @Column(name="EMPLOYEE_ID") 
    private long employeeID; 

     @ManyToMany(cascade= CascadeType.ALL) 
    private Collection<Award> awards; 

回答

0

您從數據庫中獲取它,而不是從休眠狀態。當hibernate刪除時,它首先使引用無效。刪除數據庫約束。 您還應該打開hibernate sql日誌記錄或查看數據庫分析器中的sql以查看hibernate做了什麼。你會在那裏看到導致違反約束的sql。

+0

buddy我是hibernate的開端,這是我得到的錯誤com.microsoft.sqlserver.jdbc.SQLServerException:DELETE語句與參考約束「FK5759580C246A5898」衝突。衝突發生在數據庫「HRIS_DATABASE」,表「dbo.TB_EMPLOYEE_TB_AWARD」,列「awards_AWARD_ID」。 – 2012-07-26 19:37:04

+0

這不是休眠異常。請參閱錯誤前綴。它是數據庫異常。 。你有FK,dosnt允許爲空。當你刪除。 hibernate首先設置null並且不刪除。首先刪除FK並查看它是否工作。 – 2012-07-26 19:41:07

+0

好吧,我會盡力感謝您的建議 – 2012-07-26 19:50:08

1

你映射錯了,試試這樣說:

@Entity 
@Table(name="TB_AWARD") 
public class Award implements Serializable{ 


    @Id @GeneratedValue 
    @Column(name="AWARD_ID") 
    private long awardId; 

    @ManyToMany(targetEntity=Employee.class, cascade = CascadeType.ALL) 
    @JoinTable(name = "AWARD_EMPLOYEE", joinColumns = { @JoinColumn(name ="AWARD_ID")}, 
    inverseJoinColumns = { @JoinColumn(name = "EMPLOYEE_ID") }) 
    @NotFound(action=NotFoundAction.IGNORE) 
    private Collection<Employee> employees = new ArrayList<Employee>(); 

    @Column(name="AWARD_TYPE") 
    private String awardType; 

    @Column(name="AWARD_DATE") 
    private Date awardDate; 

    @Column(name="AWARD_DETAILS") 
    @Lob 
    private String awardDetails; 

    @Column(name="REMARK") 
    private String remark; 

@Entity 
@Table(name="TB_EMPLOYEE") 
public class Employee implements Serializable { 

    @Id @GeneratedValue 
    @Column(name="EMPLOYEE_ID") 
    private long employeeID; 

    @ManyToMany(
    cascade = CascadeType.ALL, 
    mappedBy = "employees", 
    targetEntity = Award.class 
    ) 
    private Collection<Award> awards; //create the getter for this guy 

之前,請務必看看examples in the reference,它會讓你的生活變得更輕鬆。 ;)