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