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