2017-03-31 3 views
0

저는 JDOQL을 처음 사용하며 다음과 같은 문제가 있습니다. 저는 부서의 평균 급여를 얻고 평균 급여가 특정 값보다 높은 부서를 선택하려고합니다.JDOQL 하위 쿼리 - 클래스 이름 _을 (를) 확인할 수 없습니다.

Query averageSalaryByDep = pm.newQuery(Employee.class); 
averageSalaryByDep.setResult("department, avg(salary)"); 
averageSalaryByDep.setGrouping("department"); 

Query qry = pm.newQuery(Department.class); 
qry.setFilter("this.name == dep.name && averageSalary > 10000"); 
qry.declareVariables("Department dep, double averageSalary"); 
qry.addSubquery(averageSalaryByDep, "Department dep, double averageSalary", null); 

오류 메시지 나는 현재 받고 있어요 :

javax.jdo.JDOUserException: Class name averageSalary could not be resolved 
    at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:636) 
    at org.datanucleus.api.jdo.JDOQuery.executeInternal(JDOQuery.java:391) 
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:216) 

답변

1

하위 쿼리가 하나의 변수 이름이 (그리고 한 가지를 반환). 확실하지 않으면 단일 문자열 쿼리의 결과 (및 결과 SQL)를 입력 한 다음 명확해야합니다. JDO 스펙은 IIRC

당신이 검색 원한에 관한 몇 가지 유용한 예제를 가지고, 난 당신이 더 따라서

SELECT FROM mydomain.Department WHERE 
    (SELECT AVG(e.salary) FROM mydomain.Employee e WHERE e.department = this) > 10000 

같은 것을 동일시 할

Query averageSalarySubq = pm.newQuery(Employee.class); 
averageSalarySubq.setResult("avg(salary)"); 
averageSalarySubq.setFilter("this.department = :outerDepartment"); 

Query qry = pm.newQuery(Department.class); 
qry.setFilter("averageSalary > 10000"); 
qry.declareVariables("double averageSalary"); 
qry.addSubquery(averageSalarySubq, "double averageSalary", null, "this"); 

같은 것을 보면 좋을 것 하위 쿼리는 평균 급여를 얻지 만 외부 쿼리 부서에 가입합니다. SQL을 정의하면 그것이 의도 한 것인지 아닌지 알 수 있지만 서브 쿼리는 단일 변수를위한 것입니다.

+0

감사합니다. 이전에 yor 주석을보고 내 코드를 비슷한 코드로 다시 작성할 수있었습니다. 나는 많이 도와 줬어. – Joanna

관련 문제