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 ...