Java 休眠并从列表中删除

Java 休眠并从列表中删除,java,hibernate,Java,Hibernate,我有两个类,ProductConfiguration和SubProduct 我想替换配置上的子管道,我是这样做的: productConfiguration.getSubProducts().clear(); productConfiguration.getSubProducts().addAll(newSubProducts); 在执行此操作时,Hibernate尝试将父级(产品配置)的ID设置为null,然后更新数据库中的行。这将失败,因为父ID是外键,因此不可为null 从Product

我有两个类,ProductConfiguration和SubProduct

我想替换配置上的子管道,我是这样做的:

productConfiguration.getSubProducts().clear();
productConfiguration.getSubProducts().addAll(newSubProducts);
在执行此操作时,Hibernate尝试将父级(产品配置)的ID设置为null,然后更新数据库中的行。这将失败,因为父ID是外键,因此不可为null

从ProductConfiguration到SubProduct的映射:

<bag name="subProducts"
     table="sub_product"
     cascade="all-delete-orphan"
     access="field"
     lazy="false">
    <key column="parent_id"/>
    <one-to-many class="com.conscius.cpt.core.product.SubProduct"/>
</bag>

<many-to-one name="parentProduct"
             class="com.conscius.cpt.core.product.ProductConfiguration"
             column="parent_id"
             access="field"
             not-null="true"
             cascade="none"/>

如果外键不可为空,则可能要删除没有父级的子管道:

<bag name="subProducts" cascade="all-delete-orphan" ...

这里的解决方案很简单。我忘了在产品配置端添加反向语句

<bag name="subProducts"
     table="sub_product"
     cascade="all-delete-orphan"
     access="field"
     lazy="false">
    <key column="parent_id"/>
    <one-to-many class="com.conscius.cpt.core.product.SubProduct"/>
</bag>


当其父产品被删除时,您是否希望子产品存在于数据库中?如果不是,看看这个:我知道我错在哪里了。我缺少ProductConfiguration方面的相反语句。我会尽快添加答案。是的,很抱歉,我以前确实有过,但我想这可能就是问题所在。事实并非如此,我已重新插入删除孤立部分。
<bag name="subProducts"
     table="sub_product"
     cascade="all-delete-orphan"
     access="field"
     lazy="false">
    <key column="parent_id"/>
    <one-to-many class="com.conscius.cpt.core.product.SubProduct"/>
</bag>