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.
当我尝试在 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.