• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
keyPath Qualifier with one-sided relationship at the start
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

keyPath Qualifier with one-sided relationship at the start


  • Subject: keyPath Qualifier with one-sided relationship at the start
  • From: Kieran Kelleher <email@hidden>
  • Date: Thu, 10 Dec 2009 19:18:53 -0500

A long day, and my brain is not computing this one. Either it is obvious and I cannot see it, or my solution at the end is one of a number of complicated ways to do the non-obvious .... either way, someone here probably has seen this before.

I had to do some refactoring and kill one side of a toMany that was just getting too big to have anymore.

The last artifact I have left is an EOQualifier for a two-hop keyPath and my brain is just not giving it to me if it is obvious


1) Before I got rid of one side of the huge relationship I had this:

CTMediaTemplate <-->> CTMessage <<--> CTJob

2) After refactoring out the toMany of the first entity shown above to the second entity, I have this:

CTMediaTemplate <----- CTMessage <<--> CTJob

The problem: I had a method in CTJob that returned a fetch spec for the CTMediaTemplate.

    public ERXFetchSpecification<CTMediaTemplate> fetchSpecificationForMediaTemplates() {
    EOQualifier q = CTMediaTemplate.XKEY_MESSAGES.append(CTMessage.XKEY_JOB).eq(this);
    ERXFetchSpecification<CTMediaTemplate> fs = new ERXFetchSpecification<CTMediaTemplate>(CTMediaTemplate.ENTITY_NAME, q, null,true,false,null);
    return fs;
    }

FYI, the qualifier translated into normal plain WO would be sth like this:
q = new EOKeyValueQualifier( "messages.job", EOQualifier.QualifierOperatorEquals, this );

So my "messages" relationship from CTMediaTemplate to CTMessage is now gone and so cannot be used in the qualifier keypath. How do I qualify the CTMediaTemplate objects now without that part of the keypath? 

My (possibly overkill) solution I was thinking of was actually creating a flattened toMany (which feels dirty) in the EOModel like this

CTMediaTemplate <<-------(flattened relationship in CTJob: "mediaTemplates" = "messages.mediaTemplate") -------- CTJob 

... just so I could do something like the following in a CTJob instance to create the qualifier using EORelationship.qualifierWithSourceRow(...) ..... but it seems like there might be an easier way that I am not seeing that would avoid me needing to create that flattened toMany from CTJob to CTMediaTemplate which feels sloppy .... any suggestions?

<snip>
String aKey = "mediaTemplates";
        this.willRead();
        EOEntity anEntity = entity();
        EORelationship aRelationship = anEntity.relationshipNamed(aKey);
EOEditingContext anEditingContext = this.editingContext();
        EOGlobalID aGlobalID = anEditingContext.globalIDForObject(this);
        String aModelName = anEntity.model().name();
        EODatabaseContext aDatabaseContext = EOUtilities.databaseContextForModelNamed(anEditingContext,
                aModelName);
        NSDictionary aRow  = null;
        aDatabaseContext.lock();
        try {
        aRow = aDatabaseContext.snapshotForGlobalID(aGlobalID);
} finally {
aDatabaseContext.unlock();
}

        EOQualifier q = aRelationship.qualifierWithSourceRow(aRow);
</snip>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Prev by Date: Re: Connection to Postgresql...
  • Next by Date: Re: Connection to Postgresql...
  • Previous by thread: Re: Connection to Postgresql...
  • Next by thread: IE PNG FIX
  • Index(es):
    • Date
    • Thread