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

Reply via email to