0

我有两个 Java 类,Document 和 Category。

文档.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;
    }
}

类别.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;
    }

如您所见,每个 Document 可以有零个或一个类别;为此,我编写了两个 Hibernate 映射文件。

文档.hbm.xml

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

Category.hbm.xml 中除了它的属性之外什么都没有。

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

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

我该如何解决这个问题?

4

1 回答 1

0

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

由于没有从 定义关联Category to Document,因此对关联末尾所做的更改Category不会将Categoryin设置Document为 null。这是意料之中的,因为 Hibernate 不知道 in 的包含Category情况Document

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

于 2013-10-28T10:45:21.250 回答