The query certainly looks fishy. I suspect this may be related to this issue:

  http://issues.apache.org/cayenne/browse/CAY-447

Now the question is whether your relationship problem is also related to that. I guess it would help if you post your DataMap XML subset containing the 4 entities in question.

Andrus


On Jun 19, 2006, at 8:32 PM, Arturo Perez wrote:

Andrus Adamchik <andrus <at> objectstyle.org> writes:



On Jun 19, 2006, at 5:13 PM, Arturo Perez wrote:

Iterator i = articleCategory.getArticles().iterator();
while (i.hasNext()) {
      ArticleCategoryLink acl = (ArticleCategoryLink)i.next();
      ArticleMeta am = acl.getLatestArticle();
      Article a = am.getArticle();
}

The article is null but if I run an Expression I get what I expect:

Expression exp =
   ExpressionFactory.matchExp("activeArticle.categories.category",
        category);
exp = exp.andExp(
    Expression.fromString("latestArticle.article
activeArticle.article"));

The last expression looks strange (I am surprised it compiles). What
SQL is generated for the query?

Andrus



It looks like the equal sign went away.  It should be
           "latestArticle.article = activeArticle.article"

That last expression is intended to limit results to the current articles. Everything has backissues that should be ignored for the above. The SQL
is a 4-way join:


2006-06-19 12:25:21,249 [http-8316-Processor24] WARN
org.objectstyle.cayenne.access.QueryLogger- SELECT DISTINCT t0.ARTICLE_ID,
 t0.ARTICLE_META_ID FROM ARTICLE t0, ARTICLE_META t1,
ARTICLE_CATEGORY_LINK t2, ARTICLE_META t3 WHERE t0.ARTICLE_ID =
 t1.ACTIVE_ARTICLE_ID AND t1.ARTICLE_META_ID = t2.ARTICLE_META_ID AND
 t0.ARTICLE_META_ID = t3.ARTICLE_META_ID AND ((t2.CATEGORY_ID = ?) AND
 (t1.ACTIVE_ARTICLE_ID = t1.ACTIVE_ARTICLE_ID)) [bind: 1042]
2006-06-19 12:25:23,608 [http-8316-Processor24] WARN
org.objectstyle.cayenne.access.QueryLogger- === returned 91 rows. - took
 2359 ms.



I suppose I should change the above to a matchInExp to cut down on the join but I'm more concerned about the null. Although, looking at that SQL, the
last AND clause seems incorrect.

-arturo

Reply via email to