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

时间:2017-03-28 13:42:11

标签: hibernate jpa orm spring-data-jpa jpql

当我尝试在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实际上是一个列表。我不明白它是否是冬眠中的错误,或者我是否滥用它?

1 个答案:

答案 0 :(得分:0)

用户错误。

在JPQL的SELECT子句中使用多值字段是ILLEGAL语法。请参阅JPQL BNF