cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Grobmeier <grobme...@gmail.com>
Subject Re: Selecting relationships without restriction
Date Sun, 06 Nov 2011 17:37:04 GMT
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 <senecal@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

Mime
View raw message