2012-11-07 60 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); 
    } 

在查询正常工作后删除我收到的对象。