Matt Watson created CAY-2851:
--------------------------------

             Summary: Replace Existing OneToOne From New Object
                 Key: CAY-2851
                 URL: https://issues.apache.org/jira/browse/CAY-2851
             Project: Cayenne
          Issue Type: Bug
          Components: Core Library
    Affects Versions: 4.2, 5.0-M2
            Reporter: Matt Watson


We have a One to One (belongsTo on both sides) relationships between 2 Models 
(A & B), very similar to the Painting < - > PaintingInfo in the test 
environment.

When we have an existing {{a1}} related to {{b1}} (and vice-versa b1 to a1), 
and we create a new b2. Then set {{{}b2.toA = a1{}}}. We find out that 
{{b1.toA}} is still related to {{a1}} instead of {{null}}

The closest test that I found is in
{code:java}
CDOOneDep2OneIT.testReplace{code}
but just need to set from the other side of the relationship instead.

I can push up a breaking test soon. Not sure if you prefer it to be on 
{{master}} or {{{}STABLE-4.2{}}}.

It seems that during {{b2.setToA(a1)}} the call to {{setToOneTarget("toA", a1, 
true)}} triggers a call to {{setReverseRelationship("toA", a1)}} , which 
triggers a call to {{{}setToOneTarget("toB", b2, false){}}}. In here it 
accesses the {{oldTarget}} which is {{{}b1{}}}. This is where I feel it should 
nullify {{b1.toA}} using {{{}unsetReverseRelationship("toB", b1){}}}. However, 
it does NOT because {{setReverse}} was passed in as {{{}false{}}}. Since it 
does not, at this point if you check the relationships:
{{b2.toA == a1}} _GOOD_
{{a1.toB == b2}} _GOOD_
{{b1.toA == a1}} _BAD_




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to