Frage

ich habe ein Problem mit einer SELECT NEW Abfrage.

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();

Ich erhalte die folgende stacktrace wenn ich versuche, diese Abfrage auszuführen. RangeStats öffentliche Methoden hat, ist die FQN genau in der Tat RangeStats im gleichen Paket wie die Klasse befindet so dass die Abfrage. Ich habe vor auf odstat Abfragen gemacht, also bin ich auch zuversichtlich, dass a.folderName und a.hits in Ordnung ist.

Ich entwickle mit RAD 7.5, WS 7, OpenJPA 1.2.1, MS SQL JDBC-Treiber 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)
War es hilfreich?

Lösung

das Problem gefunden. Der Konstruktor akzeptiert (String, int) wenn es (String, long) erforderlich.

Andere Tipps

Follow me

 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top