INNER JOIN FETCH Example:

private static void executeQuery() {
System.out.println("-- executing query --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery("SELECT DISTINCT e FROM Employee e INNER JOIN FETCH e.tasks t");
List<Employee> resultList = query.getResultList();
for (Employee employee : resultList) {
System.out.println(employee.getName() + " - " + employee.getTasks());
}
em.close();
}
Original PostAggregate Function examples:

private static void findEmployeeCount() {
System.out.println("-- Employee COUNT --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery(
"SELECT COUNT(e) FROM Employee e");
Long result = (Long) query.getSingleResult();
System.out.println(result);
em.close();
}
private static void findEmployeeAvgSalary() {
System.out.println("-- Employee AVG Salary --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery(
"SELECT AVG(e.salary) FROM Employee e");
Double result = (Double) query.getSingleResult();
System.out.println(result);
em.close();
}
private static void findEmployeeMaxSalary() {
System.out.println("-- Employee MAX Salary --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery(
"SELECT MAX(e.salary) FROM Employee e");
Long result = (Long) query.getSingleResult();//salary of type long
System.out.println(result);
em.close();
}
private static void findEmployeeMinSalary() {
System.out.println("-- Employee MIN Salary --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery(
"SELECT MIN(e.salary) FROM Employee e");
Long result = (Long) query.getSingleResult();//salary of type long
System.out.println(result);
em.close();
}
private static void findEmployeeSalariesSum() {
System.out.println("-- Employee SUM Salary --");
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createQuery(
"SELECT SUM(e.salary) FROM Employee e");
Long result = (Long) query.getSingleResult();
System.out.println(result);
em.close();
}
Original PostPolymorphic restriction using TYPE operator

private static void runTypeEqualsQuery(EntityManagerFactory emf) {
System.out.println("-- running TYPE with '=' query --");
EntityManager em = emf.createEntityManager();
List<Employee> entityAList = em.createQuery("SELECT t FROM Employee t WHERE TYPE(t) = FullTimeEmployee")
.getResultList();
entityAList.forEach(System.out::println);
em.close();
}
private static void runTypeInQuery(EntityManagerFactory emf) {
System.out.println("-- running TYPE with 'IN' query --");
EntityManager em = emf.createEntityManager();
List<Employee> entityAList =
em.createQuery("SELECT t FROM Employee t WHERE TYPE(t) IN (ContractEmployee, PartTimeEmployee)")
.getResultList();
entityAList.forEach(System.out::println);
em.close();
}
private static void runTypeNotInQuery(EntityManagerFactory emf) {
System.out.println("-- running TYPE NOT 'IN' query --");
EntityManager em = emf.createEntityManager();
List<Employee> entityAList =
em.createQuery("SELECT t FROM Employee t WHERE TYPE(t) NOT IN (ContractEmployee, PartTimeEmployee)")
.getResultList();
entityAList.forEach(System.out::println);
em.close();
}
Original PostDowncasting to a sub type using TREAT

private static void runProjectQuery(EntityManagerFactory emf) {
System.out.println("-- running query --");
EntityManager em = emf.createEntityManager();
List<Project> entityAList = em
.createQuery("SELECT DISTINCT p FROM Project p JOIN TREAT(p.employees AS FullTimeEmployee) e"
+ " WHERE e.annualSalary > 100000 ")
.getResultList();
entityAList.forEach(System.out::println);
em.close();
}
Original Post