문제

선택한 새 쿼리에 문제가 있습니다.

Query q = em.createQuery(
           "SELECT NEW com.bcbst.odstats.ejb.RangeStats(a.folderName, SUM(a.hits)) " +  
           "FROM ODStat a GROUP BY a.folderName");
return q.getResultList();

나는 다음을 얻는다 스택 트레이스 이 쿼리를 실행하려고 할 때. rangestats 공개 방법이 있고 FQN은 정확합니다. 실제로 Rangestats는 클래스가 쿼리를 만드는 것과 동일한 패키지에 있습니다. 전에는 ODSTAT에서 쿼리를 해냈으므로 A.FolderName과 A.Hits가 괜찮다고 확신합니다.

RAD 7.5, 7, OpenJPA 1.2.1, MS SQL JDBC 드라이버 1.2로 개발 중입니다.

    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
Caused by: javax.ejb.EJBException: See nested exception; nested exception is: 
<openjpa-1.2.1-SNAPSHOT-r422266:686069 nonfatal user error> 
org.apache.openjpa.persistence.ArgumentException: Result type "class 
com.bcbst.odstats.ejb.RangeStats" does not have any public fields or setter methods 
for the projection or aggregate result element "jpqlalias1", nor does it have a 
generic put(Object,Object) method that can be used, nor does it have a public 
constructor that takes the types [class java.lang.String, long].

Caused by: <openjpa-1.2.1-SNAPSHOT-r422266:686069 nonfatal user error> 
org.apache.openjpa.persistence.ArgumentException: Result type "class 
com.bcbst.odstats.ejb.RangeStats" does not have any public fields or setter methods 
for the projection or aggregate result element "jpqlalias1", nor does it have a 
generic put(Object,Object) method that can be used, nor does it have a public 
constructor that takes the types [class java.lang.String, long].

at org.apache.openjpa.kernel.ResultPacker.<init>(ResultPacker.java:139)
at org.apache.openjpa.kernel.ResultPacker.<init>(ResultPacker.java:102)
at org.apache.openjpa.kernel.QueryImpl.getResultPacker(QueryImpl.java:1262)
at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1212)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:990)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805)
도움이 되었습니까?

해결책

문제를 발견했습니다. 생성자가 받아 들여졌습니다 (String, int) 필요할 때 (String, long).

다른 팁

날 따라 오세요

 public Company(String name, int iva, String businessArea, String coreBusiness) {
    this.name = name;
    this.iva = iva;
    this.businessArea = businessArea;
    this.coreBusiness = coreBusiness;
    }

Query query = session.createQuery("select new Company (name, iva, businessArea, coreBusiness)  from Company");


obs : org hibernate
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top