基础数据:
DEPTNO ENAME
------ ------
20 SMITH
30 ALLEN
30 WARD
20 JONES
30 MARTIN
30 BLAKE
10 CLARK
20 SCOTT
10 KING
30 TURNER
20 ADAMS
30 JAMES
20 FORD
10 MILLER
所需输出:
DEPTNO EMPLOYEES
------ ---------
10 CLARK,KING,MILLER
20 SMITH,FORD,ADAMS,SCOTT,JONES
30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
我尝试过这个 jpql 查询:
SELECT deptno, new list(ename) as employees
FROM dept_emp
然而,出现了一个例外:
org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:第 1 行第 15 列附近的新内容
JPA 2.1
休眠4.3.1
首先要使用jpa,你应该实体类。
@Entity
class Employee {
int deptNo;
String name;
}
查询的是
SELECT e.deptNo , new list(e.name) FROM Employee e GROUP BY e.deptNo
您尝试使用 JPQL 查询在持久层中实现与 UI 相关的功能(数据应如何显示)。这是个坏主意。使用持久层检索UI层中的数据,然后根据需要格式化数据。例如:
List<Employee> employees = em.createQuery("select e from Employee e").getResultList();
在你的表示层中:
Multimap<String, Employee> employeesByDepartment =
Multimaps.index(employees, Employee::getDepartmentNumber);
for (String departmentNumber : employeesByDepartment.keySet()) {
System.out.print(departmentNumber);
System.out.print("\t");
System.out.println(Joiner.on(", ").join(employeesByDepartment.get(departmentNumber)));
}