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