当我更新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>
AffectedModel:
<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都会使bulletinId字段为空。它不会删除affectedYears表中的行或后续行。
对于为什么会发生这种情况或者我可能做错的任何建议都将不胜感激。
答案 0 :(得分:0)
尝试将inverse="true"
添加到公告实体的affectedModels
媒体资源中。
我讨论了同样的问题in a blog post a while back。实际上最终在评论中提交了解决方案(我对关系的错误方面有反过来)。
另外,你说:
如果我删除“affectedModel”
这是否意味着您正在进行bulletin.removeAffectedModel( affectedModel );
,或者您是否正在使用entityDelete( affectedModel )
删除模型?如果是前者,它不会删除数据,只会删除它们之间的关系,这可以解释您所看到的结果。要删除数据,您需要运行entityDelete()
。