Yeah, sorry about messing that up :-)

On Aug 26, 2009, at 5:39 PM, Andrey Razumovsky wrote:

BTW, it seems my problems were caused by another code, that belonging to CAY-132. As now this is fixed on the trunk, we can proceed with that one

2009/8/17 Jeremias Maerki <[email protected]>

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 <[email protected]>

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



Reply via email to