无法在Hibernate中删除孤儿

时间:2012-11-07 09:35:57

标签: java hibernate cascade orphaned-objects

我发现了很多这些问题,但由于某种原因,它们不适合我。所以,我显然做错了什么。

表单对象:

@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;

我正在使用hibernate注释:

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

如果我在表单中创建一个表单Field对象,那么没有问题。两个对象都已创建。当我删除表单对象时,表单字段对象保留在数据库中。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

在实体 FormField 上建立了多对一关系。结果是对该字段的外键约束。它不允许删除实体。约束具有必须在hibernate中声明的属性级联。

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

答案 2 :(得分:0)

我的坏。

我试图通过ID删除表单对象。这没有用。

public void deleteForm(Form form) {

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

删除查询后收到的对象就可以了。