我有一个以下的hibernate映射:
<class name="Folder" >
<id name="Id">
<generator class="native"/>
</id>
<many-to-one name="Owner"
not-null="false" fetch="select" column="OwnerFK" not-found="ignore" lazy="proxy" />
<property name="Name" />
<many-to-one name="ParentFolder" column="ParentId"
not-found="ignore" lazy="proxy" not-null="false"/>
</class>
ParentId
列被引用到同一个表的Id
,这样我就知道子文件夹的父文件已被创建。
当我删除父级时,我希望删除子文件夹,如果只删除子级,则不应影响父级。
我在cascade="all"
列上尝试了parentId
但是当我只删除了孩子时删除了我的父文件夹。
可以使用Hibernate实现吗?
答案 0 :(得分:1)
是的,这可以通过Hibernate实现。您将不得不稍微改变您的映射。
<class name="Folder" >
<id name="Id">
<generator class="native"/>
</id>
<many-to-one name="Owner"
not-null="false" fetch="select" column="OwnerFK" not-found="ignore" lazy="proxy" />
<property name="Name" />
<many-to-one name="ParentFolder" column="ParentId"
not-found="ignore" lazy="proxy" not-null="false"/>
<bag name="ChildFolders" cascade="delete" inverse="true" fetch="select">
<key column="ParentId" not-null="false"/>
<one-to-many class="Folder"/>
</bag>
</class>
每个元素都可以包含父元素和子元素,因此您需要一个包来获取子元素,并为父元素提供多个元素。
因此,当您尝试删除父级时,您的孩子会出现cascade =“delete”,以确保没有孤儿。
答案 1 :(得分:0)
没有NHibernate不能这样做。你需要让模型列出结构并删除每个对象,因为你的NHibernate映射到父而不是子。