Hibernate:删除子行而不影响父级

时间:2017-11-04 10:51:02

标签: java hibernate spring-data

@Entity
class Parent {
    Long id;
}

@Entity
class Child {

    @ManyToOne
    Parent parent;  

}

目标: 我需要从Child中删除一行而不尝试删除Parent。

观察:删除了Child行,但抛出了无法删除Parent的错误,因为其他行引用了它。

1 个答案:

答案 0 :(得分:1)

您的代码应如下所示:

@Entity
class Parent {
Long id;

@OneToMany(mappedBy="parent",cascade=CascadeType.ALL,orphanRemoval=true)
Set<Child> children = new HashSet<>();

public void addChild( Child child )
{
    children.add( child );
    child.setParent( this );
}

public void removeChild( Child child )
{
    children.remove( child );
    child.setParent( null );
}

}

@Entity
class Child {

@ManyToOne(optional=false)
Parent parent; 

//important! implement hashCode and equals

}

如果要删除Child,请在Parent上使用removeChild。 (另请注意,ManyToOne上的默认FetchType是EAGER。)