java - 即使提供转换类后也出现 ClassCastException

标签 java jpa classcastexception

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

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 ,而是返回一个对象数组(包含项目 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]);
        }

关于java - 即使提供转换类后也出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594096/

相关文章:

java - SOAP 与 REST 中消费者/生产者之间的合约通信?

android - 在没有 Layout Inflater 的情况下使用 getView()

java - 转换异常 android.widget.TextView

java - 我正在org.apache.hadoop.ipc.RemoteException:Mapreduce作业中的java.io.IOException?

java - MySQL:检查我是否想使用 JAVA 插入一个已经存在的值

Java while 循环在满足所有条件之前停止

mysql - Hibernate:如何通过 jpa.hibernate.ddl-auto 选项创建和执行 sql 过程

java - 按集合中的元素查找

java - 集合获取连接

java - 在两个类完全相同的情况下获取类转换异常