Ok, am seeing a common error - Expression.andExp creates a new expression, instead of appending to an existing one (unlike SelectQuery.andQualifier, which doesn't create a new SelectQuery .. I know this can be confusing).
So this: > Expression qual = ExpressionFactory.matchExp("toTestresult", > aTestresult); > qual.andExp(Expression.fromString("toAnswer.status = status")); > qual.andExp(Expression.fromString("status = 1")); Should be written as: Expression qual = ExpressionFactory.matchExp("toTestresult", aTestresult); qual = qual.andExp(Expression.fromString("toAnswer.status = status")); qual = qual.andExp(Expression.fromString("status = 1")); Andrus On Feb 9, 2012, at 1:44 PM, atomix wrote: > I don't have the orginal source code here but here is a similar code : > > Testresultanswer is the result of an Answer which User fill; > Testresultanswer has RelationShip toAnswer > > Testresult has (some) Testresultanswer > Testresultanswer has RelationShip toTestresult > > Answer.status = 1 (correct Answer) > if Testresultanswer.status = Answer.status = 1(User choose the right > answer); > > > // DIDN'T WORK ??? > public static int getScore2(Testresult aTestresult) { > SelectQuery query = new SelectQuery(Testresultanswer.class); > > Expression qual = ExpressionFactory.matchExp("toTestresult", > aTestresult); > qual.andExp(Expression.fromString("toAnswer.status = status")); > qual.andExp(Expression.fromString("status = 1")); > query.setQualifier(qual); > > List<Testresultanswer> list = context.performQuery(query); > > return list.size(); > > } > > // The method which made by SQL Template, WORK!! > public static int getScore(Testresult aTestresult) { > > String sql = "select count(t1.idTestresultAnswer) as score" > +" from testresultanswer t1 " > +" inner join testresult t2 on t1.idTestresult = > t2.idTestresult" > +" join answer t3 on t1.idAnswer = t3.idAnswer" > +" where" > +" t2.idTestresult = $idTestresult and" > +" t1.status = t3.status and t3.status = $rightValue" > +" order by t1.idTestresultAnswer"; > > //System.out.println(sql); > SQLTemplate query = new SQLTemplate(Testresultanswer.class, > sql); > // put parameters > Map map = new HashMap(); > map.put("idTestresult", aTestresult.getIdTestresult()); > map.put("rightValue", 1); > > query.setParameters(map); > > // *** let Cayenne know that result is a scalar > SQLResult resultDescriptor = new SQLResult(); > resultDescriptor.addColumnResult("score"); > query.setResult(resultDescriptor); > > // List of Number's > Number assetsValue = (Number) > DataObjectUtils.objectForQuery(context, > query); > > return assetsValue.intValue(); > } > > -- > View this message in context: > http://cayenne.195.n3.nabble.com/HOW-TO-Creating-a-SelectQuery-has-Expression-like-this-tp3728912p3729086.html > Sent from the Cayenne - User mailing list archive at Nabble.com. >