ClassCastException 即使在提供转换之后 class

ClassCastException even after providing casting class

我有以下代码片段,当我执行时,我得到

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to test.hr.Employee

代码:

  Query query = 
            getEntityManager().createNamedQuery("Employee.findEmployees");
        List<Employee> result = query.getResultList();
        if (result != null) {
            for (int i = 0; i < result.size(); i++) {
                Employee emp = (Employee) result.get(i);
                log.info("Employee =" +emp.getNumber());
            }

JPQL:

select DISTINCT u.projectId,e.empNumber from Employee e LEFT JOIN  
e.userProjectsList u  JOIN u.projectMaster pm
where e.userNumber='SMITH'

如何摆脱这个异常?

问题出在

Employee emp = (Employee) result.get(i);

试试这个

Object[] emp = (Object[]) result.get(i);

接下来您必须查看 emp 对象

中的内容

实际上您的查询不是 return 一个 Employee 而是一个 Object 数组(包含项目 ID 和 Employee id 的对象数组),所以这里您有两个选择:

1- 像这样更改您的 JPQL 查询:

SELECT e from Employee e

2- 或者更改您的代码以从对象读取:

Query query = 
        getEntityManager().createNamedQuery("Employee.findEmployees");
    List<Object[]> result = query.getResultList();
    if (result != null) {
        for (int i = 0; i < result.size(); i++) {
            Object[] emp = (Object[]) result.get(i);
            log.info("Employee =" +emp[0]);
        }

编辑:

参考您需要做的编辑:

        for (int i = 0; i < result.size(); i++) {
            Object[] emp = (Object[]) result.get(i);
            log.info("Employee Number=" +emp[1]);
        }