2012-11-07 61 views
3

我發現了很多這些問題,但由於某些原因,他們不適合我。所以,我顯然做錯了什麼。無法刪除休眠中的孤兒兒

表單對象:

@Entity 
@Table(name = "WEBFORMS_WEBFORM") 
public class Form { 

    @Id 
    @GeneratedValue 
    @Column(name = "FORM_ID") 
    Long id; 

    @Column(name = "NAME") 
    String name; 

    @OrderBy("priority") 
    @OneToMany(mappedBy = "form", cascade={javax.persistence.CascadeType.ALL}, orphanRemoval = true) 
    Set<FormField> formFields; 

    @OrderBy("creationDate DESC") 
    @OneToMany(mappedBy = "form", cascade={javax.persistence.CascadeType.ALL}, orphanRemoval = true) 
    Set<FormResult> formResults; 

    @Column(name = "ALLOW_GUESTS") 
    Boolean allowGuest; 

    @Column(name = "SEND_MAIL") 
    Boolean sendMail; 

表格字段對象:

@Entity 
@Table(name = "WEBFORMS_FORM_FIELD") 
public class FormField { 

    @Id 
    @GeneratedValue 
    @Column(name = "FORM_FIELD_ID") 
    Long id; 

    @Column(name = "TYPE") 
    String type; 

    @Column(name = "CONTENT") 
    String content; 

    @Column(name = "PRIORITY") 
    Long priority; 

    @ManyToOne() 
    @JoinColumn(name = "FORM_ID") 
    public Form form; 

我用冬眠註釋:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-annotations</artifactId> 
    <version>3.5.6-Final</version> 
</dependency> 

如果我在表單中創建一個表單Field對象,那麼沒有問題。兩個對象都被創建。當我刪除表單對象時,表單字段對象保留在數據庫中。

回答

0

許多對實體FormField建立一個關係。結果是該字段上的外鍵約束。它不允許刪除實體。約束具有您必須在hibernate中聲明的屬性級聯。

@ManyToOne (cascade = {javax.persistence.CascadeType.ALL}) 
0

我不好。

我試圖通過ID刪除表單對象。這沒有奏效。

public void deleteForm(Form form) { 

     Session session = HibernateUtil.getSession(); 
     session.delete(form); 
     HibernateUtil.shutDown(session); 
    } 

在查詢正常工作後刪除我收到的對象。