Hibernate JPQL 构造函数表达式不适用于 OneToMany 字段

Hibernate JPQL Constructor Expression doesn't work with OneToMany field

当我尝试在 JPQL 查询中使用构造函数表达式时

class CompanyProjection {
    String name;
    List<Employee> employees;

    public CompanyProjection (String name, List<Employee> employees) {
        ...
    }    
}

class Company {
    String name;

    @OneToMany(mappedBy = "company")
    List<Employee> employees;
}

class Employee {
     @ManyToOne
     Company company;
}

select com.foo.CompanyProjection(c.name, c.employees) from Company c

我得到一个org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.foo.CompanyProjection]. Expected arguments are: java.lang.String, com.foo.Employee[........]

从上面的堆栈跟踪中,我了解到 Hibernate 期望第二个构造函数参数具有 Employee.class 类型而不是 List.class。

但是c.employees其实是一个List。不明白是hibernate的bug,还是我用错了?

用户错误。

在 JPQL 的 SELECT 子句中使用多值字段是非法语法。见 JPQL BNF.