【问题标题】:ColdFusion ORM not deleting or cascadingColdFusion ORM 不删除或级联
【发布时间】:2014-10-21 14:01:29
【问题描述】:

当我更新 CF ORM 对象时,如果其中一个子对象不再存在,它只会将链接值设置为 null,然后不会删除该项目或其任何子对象。下面是我的父对象和后续子对象的定义。 (挂在上面的孩子也有定义)

公告:

<cfcomponent persistent="true" accessors="true" table="bulletins">
    <cfproperty name="id" column="ID" fieldtype="id" generator="identity" ormtype="int" unsavedvalue="0">
    <cfproperty name="affectedModels" fieldtype="one-to-many" cfc="affectedModel" fkColumn="bulletinId" cascade="all-delete-orphan" >
</cfcomponent>

受影响的模型:

<cfcomponent persistent="true" accessors="true" table="affectedModels">
    <cfproperty name="id" column="ID" fieldtype="id" generator="identity" ormtype="int" unsavedvalue="0">
    <cfproperty name="bulletin" fieldType="many-to-one" cfc="bulletin" column="bulletinId" notNull="true" >
    <cfproperty name="affectedYears" fieldtype="collection" type="array" fkcolumn="affectedModelId" table="affectedYears" elementColumn="prodYear" elementType="string" lazy="false" cascade="all">
</cfcomponent>

这一切都可以很好地添加和更新,但是如果我删除一个“affectedModel”,那么所有 CF ORM 所做的都是 null 的 bulletinId 字段。它不会删除该行,也不会删除affectedYears 表中的后续行。

任何关于为什么会发生这种情况或我可能做错了什么的建议将不胜感激。

【问题讨论】:

    标签: hibernate orm coldfusion hibernate-mapping


    【解决方案1】:

    尝试将inverse="true" 添加到Bulletins 实体的affectedModels 属性。

    我遇到了同样的问题in a blog post a while back。解决方案实际上最终在 cmets 中提交(我在关系的错误方面有逆向)。

    另外,你说:

    如果我删除“affectedModel”

    这是否意味着您正在使用bulletin.removeAffectedModel( affectedModel );,或者您正在删除带有entityDelete( affectedModel ) 的模型?如果是前者,它不会删除数据,只会删除它们之间的关系,这将解释您所看到的结果。要删除数据,您需要运行entityDelete()

    【讨论】:

    • 当我谈到删除“affectedModel”时,我指的是在受影响的模型数组中保留一个少一个“affectedModel”的公告对象。这会导致affectedModels 表中的bulletinID 字段为空,但不会删除affectedYears 表中的行或其后续受影响年份数组。如果我从受影响的模型中删除受影响的年份,我会得到相同的结果。另外,我尝试使用 inverse="true",结果相同,只是一个空的 bulletinId,没有删除任何内容。
    • 听起来你需要entityDelete() 要删除的受影响模型,然后。
    • 公告对象的 entityDelete() 是否就足够了,还是我需要深入研究公告对象并遍历受影响模型的列表,对它们中的每一个调用 entityDelete(),然后最后在公告上?
    • 如果你有inverse并且级联设置正确,那么删除公告也应该删除受影响的模型。
    • 它似乎只是使公告 ID 为空,而不是删除孤儿。
    猜你喜欢
    • 2011-09-04
    • 2011-11-15
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多