cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeremias Maerki <...@jeremias-maerki.ch>
Subject Re: Problem with reverse relationships and inheritance
Date Mon, 17 Aug 2009 06:35:47 GMT
Thanks, Andrey. I somehow missed that. I'll see if I can allocate time
to write a test case. That could help speed things up.

On 16.08.2009 22:01:17 Andrey Razumovsky wrote:
> Hi Jeremias,
> 
> This is also known as CAY-1009:
> http://issues.apache.org/jira/browse/CAY-1009
> 
> I tried patch from there (and it looks like yours) but there WERE side
> effects (I listed them in JIRA). At the moment I was forced to make the
> relationship non-mandatory in my project (and validate in different ways). I
> would really like to get it fixed, but I haven't found time for that yet...
> Please watch the JIRA to be notified of the updates
> 
> Regards,
> Andrey
> 
> 2009/8/14 Jeremias Maerki <dev@jeremias-maerki.ch>
> 
> > I think I may have run into an issue that is related to this thread:
> > http://markmail.org/message/slm4joyswjp77vzi
> >
> > - I have an (abstract) entity A and two subentities/subclasses A1 and A2.
> > - I have an (abstract) entity B with three subentities B1, B2 and B3.
> > - There is a 1:n relationship from A to B.
> >
> > Now, if I create an instance of A1 and use addToB() to add a B1 instance,
> > B1 is added to the list. But I get a validation error because upon
> > commit the foreign key for the A1 instance is not set on the B1 instance.
> >
> > Debugging, I found that ObjRelationship.getReverseRelationship() didn't
> > look in super entities for the reverse relationship.
> >
> > Mindlessly changing that method (in Trunk) from:
> >
> >        Entity src = this.getSourceEntity();
> >
> >        Iterator<?> it = target.getRelationships().iterator();
> >        while (it.hasNext()) {
> >            ObjRelationship rel = (ObjRelationship) it.next();
> >            if (rel.getTargetEntity() != src)
> >                continue;
> >
> > to:
> >
> >        Entity src = this.getSourceEntity();
> >
> >        Iterator<?> it = target.getRelationships().iterator();
> >        while (it.hasNext()) {
> >            ObjRelationship rel = (ObjRelationship) it.next();
> >            Entity relTarget = rel.getTargetEntity();
> >            ObjEntity currentSrc = (ObjEntity)src;
> >            while (currentSrc != null) {
> >                if (relTarget == currentSrc) {
> >                    break;
> >                }
> >                currentSrc = currentSrc.getSuperEntity();
> >            }
> >            if (src == null) {
> >                continue;
> >            }
> >
> > ...solves my immediate problem, but I have no idea about any
> > side-effects. Am I doing anything wrong?
> >
> > Thanks,
> > Jeremias Maerki
> >
> >




Jeremias Maerki


Mime
View raw message