cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: HOW TO : Creating a SelectQuery has Expression like this?
Date Thu, 09 Feb 2012 11:04:47 GMT
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.
> 


Mime
View raw message