我有两个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”值,但是使用此配置我获取
无法删除或更新父行:外键约束失败
我该如何解决这个问题?
答案 0 :(得分:0)
Hibernate关联本质上都是单向的。就Hibernate而言,来自Document to Category
的关联是与Category to Document
的关联(如果有的话)不同的关联。
由于Category to Document
未定义任何关联,因此对关联的Category
结尾所做的更改不会将Category
中的Document
设置为null。这是预期的,因为Hibernate对Category
中Document
的包含不了解。
因此,解决方法是获取映射到要删除的documents
的所有Category
,将这些文档的category
设置为null并删除Category
。就像删除类别之前一样,您将删除对该类别的所有引用。