JPQL返回预期类型的java.langObject和instad

JPQL返回预期类型的java.langObject和instad,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,我有一个员工课程。Worker类扩展Employee,而Leader类扩展Worker 每个Leader都有一个列表public list workers responsiblefor=new ArrayList()。这是一个联接表,用于说明一个领导者是否负责一个或多个工作者 @Entity @Inheritance @DiscriminatorColumn(name="EMP_TYPE") @Table(name="EMPLOYEES") public abstract class Emplo

我有一个
员工
课程。
Worker
类扩展
Employee
,而
Leader
类扩展
Worker

每个
Leader
都有一个列表
public list workers responsiblefor=new ArrayList()。这是一个联接表,用于说明一个
领导者是否负责一个或多个
工作者

@Entity
@Inheritance
@DiscriminatorColumn(name="EMP_TYPE")
@Table(name="EMPLOYEES")
public abstract class Employee implements Printable, Serializable {

    @Id
    @GeneratedValue
    @Column(name = "employee_id", unique = true)
    private int id;

    @Column(name = "position")
    @Enumerated(EnumType.STRING)
    private Position position;

    @Column(name = "name")
    private String name;

    @Column(name = "salary")
    private Double salary;

    @Transient
    public List<Project> projectsWorkingOn = new ArrayList<>();

    public Employee() {
    }
}
领导者

@Entity
public class Worker extends Employee {

    @Id
    @GeneratedValue
    @Column(name = "worker_id", unique = true)
    private int id;

    public Worker() {
    }
}
@Entity
public abstract class Leader extends Worker {

    public Leader() {
    }

    public Leader(Position position, String name, Double salary) {
        super(position, name, salary);
    }

    @OneToMany
    @JoinTable(name="WORKERS_RESPONSIBLE_FOR",
            joinColumns = {@JoinColumn(name="RES_ID")},
    inverseJoinColumns = {@JoinColumn(name="FOR_ID")})
    public List<Worker> workersResponsibleFor = new ArrayList<>();
}
错误:

线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Object;无法转换为com.company.employees.Worker

我得到了一个
java.lang.Object
,而不是
Worker
。但是我的所有其他方法都能够返回Worker,所以我使用的查询可能有问题吗?谢谢

select e1, e2 from Employee e1 join e1.workersResponsibleFor e2 WHERE ...
将始终返回类型为
Object[]
(消息会准确地告诉您),因为这是JPA规范定义的。如果您查看元素0,它将是e1类型,元素1将是e2类型。建议您查看JPA规范或您使用的任何实现的文档


如果您只选择了候选别名,那么您将得到一行e1类型。同样,在JPA规范中定义!

当他们回答您的问题时,请随意接受答案。如果他们不接受,请说为什么不接受!
select e1, e2 from Employee e1 join e1.workersResponsibleFor e2 WHERE ...