Java 在JPQL中选择NEW
我对SELECT NEW查询有问题Java 在JPQL中选择NEW,java,jpa,jpql,openjpa,Java,Jpa,Jpql,Openjpa,我对SELECT NEW查询有问题 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(); 当我尝试运行此查询时,我得到以下信息。没有公共方法,FQN是准确的,事实上Ra
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();
当我尝试运行此查询时,我得到以下信息。没有公共方法,FQN是准确的,事实上RangeStats与进行查询的类驻留在同一个包中。我以前在ODStat上做过查询,所以我也相信a.folderName和a.hits是可以的
我正在使用RAD7.5、WAS7、OpenJPA1.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)
位于com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
位于com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
原因:javax.ejb.EJBException:参见嵌套异常;嵌套异常是:
org.apache.openjpa.persistence.ArgumentException:结果类型“类
“com.bcbst.odstats.ejb.RangeStats”没有任何公共字段或setter方法
对于投影或聚合结果元素“jpqllais1”,它也没有
可以使用的泛型put(Object,Object)方法,也没有公共
构造函数,其类型为[class java.lang.String,long]。
原因:
org.apache.openjpa.persistence.ArgumentException:结果类型“类
“com.bcbst.odstats.ejb.RangeStats”没有任何公共字段或setter方法
对于投影或聚合结果元素“jpqllais1”,它也没有
可以使用的泛型put(Object,Object)方法,也没有公共
构造函数,其类型为[class java.lang.String,long]。
位于org.apache.openjpa.kernel.ResultPacker(ResultPacker.java:139)
位于org.apache.openjpa.kernel.ResultPacker(ResultPacker.java:102)
位于org.apache.openjpa.kernel.QueryImpl.getResultPacker(QueryImpl.java:1262)
位于org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1212)
位于org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:990)
位于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