这是我第二次和jpa一起玩,
我写了这段代码:
String queryString = "SELECT e.uidprofile, e.profilecode, e.catUso, max(e.zonaClim), e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4"
+ " FROM "
+ entityClass.getSimpleName()
+ " e "
+ " WHERE e.catUso like :code "
+ " group by e.uidprofile, e.profilecode, e.catUso, e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4"
+ " order by e.uidprofile";
Query query = entityManager.createQuery(queryString);
query.setParameter("code", "C" + "%");
List<SamTbProfileMapping> resultList = query.getResultList();
ClassLoader c1 = this.getClass().getClassLoader();
ClassLoader c2 = resultList.getClass().getClassLoader();
if(resultList.size()>0){
System.out.println(resultList.get(0).getCatUso());
}
调试它:
resultList
包含SamTbProfileMapping
的所有字段,其中包含正确的值List<SamTbProfileMapping> resultList = query.getResultList();
之后C2
到null
和System.out.println(resultList.get(0).getCatUso());
表示无法将结果列表转换为SamTbProfileMapping
答案 0 :(得分:2)
我认为你应该使用typed version of the createQuery function(可从1.6获得)
尝试:
Query query = entityManager.createQuery(queryString, SamTbProfileMapping.class);
当然,这意味着SamTbProfileMapping
必须是实体类。而且我不确定聚合列,您可能需要为其应用别名。
答案 1 :(得分:2)
您正在使用查询检索数组列表。不是对象列表。
"Select a, b, c, d, from something"
- 返回List<Object[]>
然后以与查询相同的顺序访问单独的成员。 例如:
List<Object[]> myList = query.getResultList();
MyAClass a1 = (MyAClass) myList.get(0)[0];
MyBClass b1 = (MyBClass) myList.get(0)[1];
要选择对象列表,您可以使用:
"select a from MyClass a where ..."
然后
List<MyClass> myList = query.getResultList();
MyClass result1 = myList.get(0);