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
