从JPQL查询返回JPA实体的子集作为映射数组?

时间:2012-08-22 15:14:26

标签: hibernate jpa jpql

在JPQL中,可以使用构造函数表达式(例如

)请求实体的子集
SELECT NEW example.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e

返回EmployeeDetails类型的对象列表

或使用投影选择,例如

SELECT e.name, e.salary FROM Employee e

返回Object[] result,其中result [0]是e.name,result [1]是e.salary

有没有办法让JPA返回一个包含实体子集的Map,例如是否有一个可以返回List<Map<String,Object>> result的JPQL查询,以便result.get(0).get("e.name")返回e.nameresult.get(0).get('e.salary')返回e.salary

如果JPQL无法做到,那么HQL能做到吗?

1 个答案:

答案 0 :(得分:5)

JPA提供了有限数量的return types for compound selection:array,tuple和construct,而Hibernate提供了更多return types for select clause,其中包括Map。

SELECT NEW map(e.name, e.salary, e.department.name) FROM Employee e

此HQL查询从别名返回Map到选定值。