Thanks Chuck and Ramsey for quick response.
I don't know what was the case. Whether the editingContexts where overlapping
or not. Before I was using:
a.delete();
editingContext().saveChanges(); // This is the same editing context which was
used to load "a".
The above was not triggering willDelete() of children.
I changed this with:
editingContext().deleteObject(a);
editingContext().saveChanges();
This triggered willDelete() of children.
I also heard that if an entity has multiple levels of hierarchy then delete
cascade won't work after second level.
a.toB().toC().toD()
With willDelete() implemented and "editingContext().deleteObject(a)" will
delete a and a.toB().
If above is true, what is the best practice to complete the delete cascade?
Thanks,
Farrukh
On 2010-07-23, at 11:07 PM, Ramsey Gurley wrote:
>
> On Jul 23, 2010, at 3:56 PM, Chuck Hill wrote:
>
>> willDelete() won't be called on the rest until saveChanges()
>>
>>
>> On Jul 23, 2010, at 12:51 PM, Farrukh Ijaz wrote:
>>
>>> Hi,
>>>
>>> I have a model where an entity A has a recursive relationship as parent
>>> "toParentOfTypeA()" and children "toChildrenOfTypeA()". Consider it as a
>>> tree structured entity.
>>>
>>> In the model have setup the entity to delete cascade.
>>>
>>> In the entity I have overriden the method willDelete(). Now when I delete
>>> the parent, it fires the willDelete() of it but does not fire willDelete()
>>> of it's children. When I checked in the willDelete() I found the
>>> toChildren() relationship is empty but the children are there and I access
>>> it in the component when I generate tree.
>
>
> I just wanted to add that if you are calling something like setParent instead
> of addObjectToBothSides that you will only be setting the relationship one
> way. So from your children, you will be able to see the toParent, but you
> will not see any children from the Parent's toChildren. There's a property
> to do this automatically in Wonder, but I think you need to be using wonder
> eogen templates for that property to work.
>
> If that isn't the case, then you may be crossing editing contexts.
>
> Ramsey
>
>
>>> Below is the source code.
>>>
>>> Follwing method is overridden inside entity A.
>>>
>>> public void willDelete() {
>>> ERXUtilities.deleteObjects(editingContext(), toChildrenOfTypeA());
>>> }
>>>
>>> // below code is somewhere else.
>>> A a = // object retrieved from the db.
>>> a.delete();
>>>
>>> Any Idea? If needed, I can send the source code too.
>>>
>>> Farrukh
>>>
>>> Sent from my iPad _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>>
>>> This email sent to [email protected]
>>
>> --
>> Chuck Hill Senior Consultant / VP Development
>>
>> Practical WebObjects - for developers who want to increase their overall
>> knowledge of WebObjects or who are trying to solve specific problems.
>> http://www.global-village.net/products/practical_webobjects
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/webobjects-dev/ramsey%40xeotech.com
>>
>> This email sent to [email protected]
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]