cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From atomix <say_i_love_you_4e...@yahoo.com>
Subject Re: HOW TO : Creating a SelectQuery has Expression like this?
Date Thu, 09 Feb 2012 10:44:09 GMT
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.

Mime
View raw message