Hi Joe, thanks for letting me know. This would be a killer feature.
Cheers, Christian On Sun, Nov 6, 2011 at 5:35 PM, Joseph Senecal <sene...@apple.com> wrote: > Christian, > > There is no way that I know of to specify additional qualifiers to Cayenne's > built in relationships. The design is that getPrices should return all prices > where Price.article field has been set to that article. > > What you can do is add your own method getCurrentPrices that returns all > non-historic prices. This could either explicitly run a query looking for > Article.articleID = Price.articleID and Price.historic is false or null. Or > you can filter though the list of all Prices to select the prices which > aren't historic. > > The second option has the advantage that it will automatically notice when > new prices are added or old prices are marked as historic. > > The first option has the advantage that it doesn't load all prices into > memory, but it doesn't return unsaved current prices. And if the result is > cached, it doesn't reflect any changes. > > Joe > > On Nov 6, 2011, at 8:04 AM, Christian Grobmeier wrote: > >> Hi all, >> >> I have two tables Article and Price. >> The table Price can containt historic prices which should not be selected. >> >> I do something like that: >> >> Expression expression = ExpressionFactory.matchExp("prices.historic", false); >> Expression fullExp = >> expression.orExp(ExpressionFactory.matchExp("prices+.historic", >> null)); >> SelectQuery query = new SelectQuery(Module.class, fullExp); >> List list = ctx.performQuery(query); >> >> This generates a correct sql like: >> >> SELECT DISTINCT t0....* >> FROM articles t0 >> LEFT JOIN prices t1 ON (t0.id = t1.article_id) >> WHERE (t1.historic = false) OR (t1.historic IS NULL) >> >> Using that sql works well on my MySQL db directly. >> >> When I run Cayenne, my junit test case fails because I when I call >> getPrices() I get even the historic ones. >> >> For example: >> >> List list = ctx.performQuery(query); >> Article a = (Article)list.get(0); >> a.getPrices(); // <--- returns historic true/false >> >> I had the expectation that the historic prices should not appear here. >> Do I miss something? >> >> Cheers, >> Christian > > -- http://www.grobmeier.de