You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by "Kevin Menard (JIRA)" <de...@cayenne.apache.org> on 2007/10/23 21:33:52 UTC

[JIRA] Created: (CAY-901) Cannot set more than one to-one relationship to null.

Cannot set more than one to-one relationship to null.
-----------------------------------------------------

                 Key: CAY-901
                 URL: https://issues.apache.org/cayenne/browse/CAY-901
             Project: Cayenne
          Issue Type: Bug
          Components: Cayenne Core Library
    Affects Versions: 3.0
            Reporter: Kevin Menard
            Assignee: Andrus Adamchik
             Fix For: 3.0


Given three entities Person, Place, Thing.  Person has a to-one relationship to Place.  Person has a to-one relationship to Thing.  Calling the following code does not work:

person.setPlace(null);
person.setThing(null);
person.getObjectContext().commitChanges();

The place will be set to null, but the thing will not.  The problem appears to be in DataDomainDBDiffBuilder#arcDeleted().  There, if the currentArcDiff is null, a new one is created and the arc deletion noted.  If the currentArcDiff is not null, however, an arc deletion will only be added if the arcId has already been added to the map.  In the case of the setThing() call, the currentArcDiff will not be null, containing the place deletion, but there will be no entry for the thing deletion.  The thing deletion will not be added because of the blocking condition.

It appears that either the condition needs to be removed or refined to account for such a situation.  Given that I'm not clear on what the original intent was, it's hard to recommend a clear solution.  Removing the condition fixed the problem in my codebase.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Re: [JIRA] Closed: (CAY-901) Cannot set more than one to-one relationship to null.

Posted by Kevin Menard <km...@servprise.com>.
Thanks for the quick fix.  I was going to create a test case over the
weekend, but looks like I don't need to now :-)

-- 
Kevin


On 10/25/07 5:20 AM, "Andrus Adamchik (JIRA)" <de...@cayenne.apache.org>
wrote:

> 
>      [ 
> https://issues.apache.org/cayenne/browse/CAY-901?page=com.atlassian.jira.plugi
> n.system.issuetabpanels:all-tabpanel ]
> 
> Andrus Adamchik closed CAY-901.
> -------------------------------
> 
>     Resolution: Fixed
> 
> fixed on 3.0M2 tag and trunk. Thanks Kevin for digging to the core of the
> issue, so the fix only took 5 minutes for me
> 
>> Cannot set more than one to-one relationship to null.
>> -----------------------------------------------------
>> 
>>                 Key: CAY-901
>>                 URL: https://issues.apache.org/cayenne/browse/CAY-901
>>             Project: Cayenne
>>          Issue Type: Bug
>>          Components: Cayenne Core Library
>>    Affects Versions: 3.0
>>            Reporter: Kevin Menard
>>            Assignee: Andrus Adamchik
>>             Fix For: 3.0
>> 
>> 
>> Given three entities Person, Place, Thing.  Person has a to-one relationship
>> to Place.  Person has a to-one relationship to Thing.  Calling the following
>> code does not work:
>> person.setPlace(null);
>> person.setThing(null);
>> person.getObjectContext().commitChanges();
>> The place will be set to null, but the thing will not.  The problem appears
>> to be in DataDomainDBDiffBuilder#arcDeleted().  There, if the currentArcDiff
>> is null, a new one is created and the arc deletion noted.  If the
>> currentArcDiff is not null, however, an arc deletion will only be added if
>> the arcId has already been added to the map.  In the case of the setThing()
>> call, the currentArcDiff will not be null, containing the place deletion, but
>> there will be no entry for the thing deletion.  The thing deletion will not
>> be added because of the blocking condition.
>> It appears that either the condition needs to be removed or refined to
>> account for such a situation.  Given that I'm not clear on what the original
>> intent was, it's hard to recommend a clear solution.  Removing the condition
>> fixed the problem in my codebase.

-- 



[JIRA] Closed: (CAY-901) Cannot set more than one to-one relationship to null.

Posted by "Andrus Adamchik (JIRA)" <de...@cayenne.apache.org>.
     [ https://issues.apache.org/cayenne/browse/CAY-901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrus Adamchik closed CAY-901.
-------------------------------

    Resolution: Fixed

fixed on 3.0M2 tag and trunk. Thanks Kevin for digging to the core of the issue, so the fix only took 5 minutes for me

> Cannot set more than one to-one relationship to null.
> -----------------------------------------------------
>
>                 Key: CAY-901
>                 URL: https://issues.apache.org/cayenne/browse/CAY-901
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>    Affects Versions: 3.0
>            Reporter: Kevin Menard
>            Assignee: Andrus Adamchik
>             Fix For: 3.0
>
>
> Given three entities Person, Place, Thing.  Person has a to-one relationship to Place.  Person has a to-one relationship to Thing.  Calling the following code does not work:
> person.setPlace(null);
> person.setThing(null);
> person.getObjectContext().commitChanges();
> The place will be set to null, but the thing will not.  The problem appears to be in DataDomainDBDiffBuilder#arcDeleted().  There, if the currentArcDiff is null, a new one is created and the arc deletion noted.  If the currentArcDiff is not null, however, an arc deletion will only be added if the arcId has already been added to the map.  In the case of the setThing() call, the currentArcDiff will not be null, containing the place deletion, but there will be no entry for the thing deletion.  The thing deletion will not be added because of the blocking condition.
> It appears that either the condition needs to be removed or refined to account for such a situation.  Given that I'm not clear on what the original intent was, it's hard to recommend a clear solution.  Removing the condition fixed the problem in my codebase.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.