2014-08-27 37 views
1

當我更新一個CF ORM對象時,如果其中一個孩子不在那裏,它只會將鏈接值設置爲null,然後不會刪除該項目或其任何子項。以下是我父對象和後續子對象的定義。 (掛它的孩子被定義爲好)ColdFusion ORM不刪除或級聯

公告:

<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確實爲null bulletinId字段。它不會刪除受影響的表中的行或後續行。

任何有關爲什麼會發生這種情況,或者我可能會做錯什麼的建議將不勝感激。

回答

0

嘗試將inverse="true"添加到affectedModels財產的公告實體。

我覆蓋了相同的問題in a blog post a while back。這個解決方案實際上最終被提交到評論中(我反過來反駁了這種關係)。

而且,你說:

如果我刪除了 「affectedModel」

這是否意味着你在做bulletin.removeAffectedModel(affectedModel);,或者你刪除與entityDelete(affectedModel)模型?如果前者,它不會刪除數據,只會刪除它們之間的關係,這將解釋你所看到的結果。爲了刪除數據,您需要運行entityDelete()

+0

當我說刪除「affectedModel」時,我指的是在受影響的模型陣列中使用少一個「affectedModel」來保留公告對象。這將導致affectedModels表中的bulletinID字段爲空,但不會刪除受影響的年份表中受影響年份的行或其後續數組。如果我從受影響的模型中刪除受影響的年份,我也會得到相同的結果。此外,我試圖使用inverse =「true」,結果相同,只是一個null bulletinId,沒有任何刪除。 – 2014-08-29 13:36:14

+0

聽起來像你需要'entityDelete()'然後你想要刪除受影響的模型。 – 2014-08-29 17:15:12

+0

公告對象的entityDelete()是否足夠,或者是否需要深入公告對象並遍歷受影響的模型的列表,然後在公告中調用entityDelete(),然後在公告上最後進行遍歷? – 2014-09-04 14:28:01