Java 在JPA中使用GROUPBY子句时发生ClassCastException
我在JPA工作。在执行分组子句示例时,它抛出了ClassCastException 下面是我的代码:Java 在JPA中使用GROUPBY子句时发生ClassCastException,java,jpa,Java,Jpa,我在JPA工作。在执行分组子句示例时,它抛出了ClassCastException 下面是我的代码: public class StudentGrouping { public static void main(String[] args) { EntityManager entityManager = EntityManagerUtil.getEmf() .createEntityManager(); try { EntityT
public class StudentGrouping
{
public static void main(String[] args)
{
EntityManager entityManager = EntityManagerUtil.getEmf()
.createEntityManager();
try {
EntityTransaction entr = entityManager.getTransaction();
entr.begin();
Query query = entityManager
.createQuery("SELECT student.studentName, SUM(student.studentAge) FROM Student student GROUP BY student.studentName");
List<?> list = query.getResultList();
Iterator<?> iterator = list.iterator();
while (iterator.hasNext())
{
System.out.println("entered into loop");
Student student = (Student) iterator.next();
System.out.print("Student Name:"+student.getStudentName());
System.out.print(" Age:"+ student.getStudentAge());
System.out.println();
}
entr.commit();
System.out.println("success");
}
catch (Exception e)
{
e.printStackTrace();
} finally {
entityManager.close();
}
}
}
我的POJO类字段是:
@Column(name = "studentName")
private String studentName;
@Column(name = "studentAge")
private int studentAge;
是我的GROUPBY子句查询错误 这是因为我确信你的
学生
班级看起来不像
String studentName;
Integer yyyy;
这就是你要的东西
student.studentName, SUM(student.studentAge)
我建议您要么创建一个看起来像您的结果的类,要么将结果作为一个对象[]
如
除非您已将
Student
类定义为字符串和数字,否则您不会返回Student
类,因此您无法将其转换为此行中的类型:
Student student = (Student) iterator.next();
您可能还应该定义列表和迭代器正在处理的类的类型代码>是一个问题,因为你实际上并没有把一个学生拉回来
从学生中选择student.studentName和SUM(student.studentAge)
按student.studentName列出的学生组
您的查询正在收回这两个字段。如果要映射到学生对象,必须使用以下命令
来自学生
然后对数据进行手工计算。如果您想使用原始查询,则必须使用解析每个值,而不是使用迭代器(假设它们位于结果列表中)
for (Object[] result : resultList) {
String studentName = (String) result[0]
Integer age = (Integer) result[1];
}
问题是您实际上并没有选择学生,而是试图从学生中选择自定义值
试试这个:
首先在实体内部创建一个构造函数,该构造函数有两个参数,即名称和年龄
然后使用此查询:
按Student.studentName从学生组中选择新的com.sample.Student(Student.studentName,SUM(Student.studentAge))
您需要在查询中指定完整的类名(sample:com.sample.Student)谢谢,您可以使用学生表的名称和年龄告诉我一个group by子句。根据我所做的一些搜索,根据驱动程序sum
有时作为字符串返回,那么我现在如何分组。非常感谢即使它看起来像那样,你仍然不能把它投给学生即使它看起来像那样,你仍然不能把它投给学生
Student student = (Student) iterator.next();
for (Object[] result : resultList) {
String studentName = (String) result[0]
Integer age = (Integer) result[1];
}