Writing effective custom queries in Hibernate
Join the DZone community and get the full member experience.
Join For Free- Hibernate returns List of Object arrays (List<Object>.)
- Lots of ugly mapping code.
- Every Object has to be casted.
- Maintain indexes in code, so if I add a new column, I have to ensure I use the right index.
public List<SalaryByDepartment> getSalaryByDepartment() { Session session = HibernateUtil.getSessionFactory().openSession(); try { List<Object> contactList = session.createQuery("select " + "department.id, " + "department.departmentName, " + "sum(employee.salary) from Employee employee, Department department " + "where employee.department.id = department.id group by department.id") .list(); List<SalaryByDepartment> salaryByDepartments = new ArrayList<SalaryByDepartment>(); for (Object object : contactList) { Object[] result = (Object[]) object; SalaryByDepartment salaryByDepartment = new SalaryByDepartment(); salaryByDepartment.setDeptId((Integer) result[0]); salaryByDepartment.setDepartmentName((String) result[1]); salaryByDepartment.setSalary((Double) result[2]); salaryByDepartments.add(salaryByDepartment); } return salaryByDepartments; } catch (HibernateException e) { e.printStackTrace(); return null; } finally { session.close(); } }
public List<SalaryByDepartment> getNewSalaryByDepartment() { Session session = HibernateUtil.getSessionFactory().openSession(); try { List<SalaryByDepartment> salaryByDept = session.createQuery("select " + "new hsqldb.results.SalaryByDepartment(department.id, department.departmentName, sum(employee.salary)) " + "from Employee employee, Department department " + "where employee.department.id = department.id group by department.id") .list(); return salaryByDept; } catch (HibernateException e) { e.printStackTrace(); return null; } finally { session.close(); } }
Opinions expressed by DZone contributors are their own.
Comments