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

Reply via email to