cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aristedes Maniatis <...@maniatis.org>
Subject Re: Selecting relationships without restriction
Date Sun, 06 Nov 2011 22:01:19 GMT
On 7/11/11 3: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

You could use single table inheritance to map this, if that isn't overkill for your needs.
Then you get a discriminator which will be applied to the joins.


Ari


-- 
-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

Mime
View raw message