2012-07-02 4 views
2

Apache Openjpa 2의 select 절에서 하위 쿼리를 실행해야합니다. JPA는 SELECT 절에서 하위 쿼리를 지원합니까? 내 쿼리를 실행JPA로 select 절의 Suqueries

SELECT t.date, t.value, 
    (SELECT COUNT(DISTINCT t2.value2) FROM table t2 WHERE t2.date = t.date) 
FROM table t 
WHERE ... 

, 나는 클래스 캐스트 예외가 얻을 :

Exception in thread "main" <openjpa-2.1.1-SNAPSHOT-r422266:1141200 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: 
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:872) 
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794) 
    at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542) 
    at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:315) 
    at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:331) 
Caused by: java.lang.ClassCastException: org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect incompatible with org.apache.openjpa.jdbc.sql.SelectImpl 
    at org.apache.openjpa.jdbc.sql.SelectImpl.setParent(SelectImpl.java:579) 
    at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.newSelect(SelectConstructor.java:147) 
    at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.evaluate(SelectConstructor.java:87) 
    at org.apache.openjpa.jdbc.kernel.exps.SubQ.appendTo(SubQ.java:209) 
    at org.apache.openjpa.jdbc.kernel.exps.SubQ.appendTo(SubQ.java:203) 
    at org.apache.openjpa.jdbc.kernel.exps.SubQ.newSQLBuffer(SubQ.java:167) 
    at org.apache.openjpa.jdbc.kernel.exps.SubQ.selectColumns(SubQ.java:153) 
    at org.apache.openjpa.jdbc.kernel.exps.SubQ.select(SubQ.java:148) 
    at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.select(SelectConstructor.java:372) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.populateSelect(JDBCStoreQuery.java:295) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.access$100(JDBCStoreQuery.java:86) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery$1.select(JDBCStoreQuery.java:267) 
    at org.apache.openjpa.jdbc.sql.LogicalUnion.select(LogicalUnion.java:297) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.populateUnion(JDBCStoreQuery.java:265) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeQuery(JDBCStoreQuery.java:211) 
    at org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:782) 
    at org.apache.openjpa.datacache.QueryCacheStoreQuery$QueryCacheExecutor.executeQuery(QueryCacheStoreQuery.java:346) 
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005) 
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863) 
    ... 6 more 

이것이 가능 또는 내가 NativeQuery/싱글 사용해야 할

내 쿼리는 다음과 같은 것입니다 검색어?

답변

5

아니요, SELECT 절에 하위 쿼리를 사용하는 것은 지원되지 않습니다. JPA 2.0 사양에서는 다음 단어로 알려줍니다.

하위 쿼리는 WHERE 또는 HAVING 절에 사용될 수 있습니다.