多对一单向关联:删除parent和set children列为null

时间:2013-10-28 10:16:44

标签: java hibernate hibernate-mapping many-to-one

我有两个Java类,Document和Category。

Document.java

public class Document {
    private int document_id;
    private Category category;

    public void setDocument_id(int document_id) {
        this.document_id = document_id;
    }

    public int getDocument_id() {
        return this.document_id;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public Category getCategory() {
        return this.category;
    }
}

Category.java

public class Category {
    private int category_id;
    private String description;

    public void setCategory_id(int category_id){
        this.category_id = category_id;
    }
    public int getCategory_id(){
        return this.category_id;
    }
    public void setDescription(String description){
        this.description = description;
    }
    public String getDescription() {
        return this.description;
    }

如您所见,每个文档可以包含零个或一个类别;出于这个原因,我写了两个Hibernate映射文件。

Document.hbm.xml

[...]
<many-to-one name="category" class="Category" column="category"/>
[...]

并且在Category.hbm.xml中没有任何内容,除了它的属性。

当删除类别(session.delete(category))时,我希望Document上的相应列更新为“null”值,但是使用此配置我获取

  

无法删除或更新父行:外键约束失败

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Hibernate关联本质上都是单向的。就Hibernate而言,来自Document to Category的关联是与Category to Document的关联(如果有的话)不同的关联。

由于Category to Document未定义任何关联,因此对关联的Category结尾所做的更改不会将Category中的Document设置为null。这是预期的,因为Hibernate对CategoryDocument的包含不了解。

因此,解决方法是获取映射到要删除的documents的所有Category,将这些文档的category设置为null并删除Category。就像删除类别之前一样,您将删除对该类别的所有引用。