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.
> 

Reply via email to