Yes, but as far as I know, Dan cannot flatten the relationship list
without losing access to the other information contained in the join
table.
I have had the same issue, and as far as I know, you have to live
without flattened relationships in this case.
On Tue, Mar 17, 2009 at 2:34 PM, Andrey Razumovsky
<razumovsky.andre..mail.com> wrote:
> Dan,
>
> As far as I know, Cayenne *should* allow that prefetch and there should be
> less than N+1 select. Is there any exception now? You'd likely want to check
> prefetch docs [1] to see that your query isn't under limitation described
> there.
>
> About flattened relationships, these ones only affect object layer, not
> database layer. So all DB structure will remain untouched. Have a look at
> many-to-many modeling article [2]! It's a bit out of date (ObjRelationship
> mapping dialog has changed recently and became more user-friendly), but
> you'll get the point!
>
> Andrey
>
> [1] http://cayenne.apache.org/doc/prefetching.html
> [2] http://cayenne.apache.org/doc/many-to-many-relationships.html
>
> 2009/3/17 Dan <daniel.can..mail.com>
>
>> Andrey Razumovsky <razumovsky.andrey <at> gmail.com> writes:
>>
>> >
>> > Hi Dan!
>> >
>> > It seems quite strange to me that relationship from PARTY_CASE_LINK to
>> PARTY
>> > is called "parties". So seems it's to-many. But PARTY_CASE_LINK has
>> > "partyid", so no more than one PARTY can exist for PARTY_CASE_LINK.
>> > Also can't flattened relationships [1] be useful for you in this case?
>> >
>> > [1] http://cayenne.apache.org/doc/flattened-relationships.html
>> >
>> > Andrey
>> >
>>
>> Andrey,
>>
>> Ahh - yes - there was a flaw in the data model - the relationships to the
>> PARTY_CASE_LINK table should be toMany, but all of the reverse
>> relationships
>> should be toOne.
>>
>> So i now have relationships that allow me to get
>>
>> List<PartyCaseLink> casesLinks = pty.getPartyCases();
>> for (PartyCaseLink caseLink : casesLinks)
>> {
>> CourtCase cases = caseLink.getCase();
>> ... do stuff
>> }
>>
>> That is now resolved, and I can get "half" way to the objects that I want
>> without additional DB queries using:
>>
>> selectQuery.addPrefetch("partyCases");
>>
>> BUT -- i see that cayenne is not allowing me to addPrefetch all the way to
>> the
>> "case" -- e.g. i want to:
>>
>> selectQuery.addPrefetch("partyCases.case");
>>
>> to avoid going back to the database N times (1 per row).
>>
>> ...
>>
>> Also - flattened relationships look interesting, but since I have a "real"
>> relationship in the database there already, shouldn't i be able to use
>> that?
>>
>> Thanks again in advance.
>>
>> dan
>>
>>
>
This archive was generated by hypermail 2.0.0 : Tue Mar 17 2009 - 17:17:28 EDT