2010-10-22 46 views
1

我在使用JDOQL(使用DataNucleus)进行子查询计数时遇到了问题。下面的查询JDOQL子查询计数问题

SELECT this.price 
FROM com.mysema.query.jdo.test.domain.Product 
WHERE (SELECT count(other) 
FROM com.mysema.query.jdo.test.domain.Product other 
WHERE other.price > this.price) > a1 
PARAMETERS java.lang.Long a1 

导致异常

javax.jdo.JDOUserException: Cannot perform operation ">" on SubqueryExpression "(SELECT COUNT("OTHER".PRODUCT_ID) FROM PRODUCT "OTHER" WHERE "OTHER".PRICE > THIS.PRICE)" and IntegerLiteral "?" 
    at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:390) 
    at org.datanucleus.jdo.JDOQuery.executeWithArray(JDOQuery.java:321) 

下面的查询工作既不:

SELECT this.price 
FROM com.mysema.query.jdo.test.domain.Product 
WHERE !(SELECT other 
FROM com.mysema.query.jdo.test.domain.Product other 
WHERE other.price > this.price).isEmpty() 

什么是确保一个子查询的结果是不是空的正确方法?

回答

1

我得到了从DataNucleus 2.0.4升级到2.1.2所解决的问题。第一个查询起作用。