The sorting SQL:s now returns the same number of employees when sorting on keyword as returned when sorting on last name.

This commit is contained in:
Tom Vahlman 2012-04-14 11:18:02 +02:00
parent 3ad8621ae9
commit cdc50fae90
2 changed files with 16 additions and 35 deletions
src/main/java/se/su/dsv/scipro/springdata

@ -16,7 +16,7 @@ import java.util.List;
*/ */
@Transactional ( readOnly = true ) @Transactional ( readOnly = true )
public interface SupervisorRepo extends JpaRepository<Employee, Long>, QueryDslPredicateExecutor<Employee> { public interface SupervisorRepo extends JpaRepository<Employee, Long>, QueryDslPredicateExecutor<Employee> {
// select employeeFull from Employee employeeFull where employeeFull.id in (
@Query ("select employee.id " + @Query ("select employee.id " +
"from Employee employee " + "from Employee employee " +
"join employee.keywords.keywords keywords " + "join employee.keywords.keywords keywords " +
@ -27,21 +27,14 @@ public interface SupervisorRepo extends JpaRepository<Employee, Long>, QueryDslP
@Param("keywordTypeName") @Param("keywordTypeName")
String keywordTypeName); String keywordTypeName);
// hämtar employees med keywords där typen är type name... men en employee kan ha keywords av flera olika type names // dessa två metoder hämtar employees med keywords där typen är type name... men en employee kan ha keywords av flera olika type names
@Query ("select employee.id " + @Query ("select employee.id " +
"from Employee employee " + "from Employee employee " +
"join employee.keywords.keywords keywords " + "join employee.keywords.keywords keywords " +
"where keywords.type.name = :keywordTypeName " + "where keywords.type.name = :keywordTypeName " +
"group by employee.id " + "group by employee.id " +
//"order by size(employee.keywords.keywords) asc ")
"order by size(employee.keywords.keywords) asc ") "order by size(employee.keywords.keywords) asc ")
// sum(keywords.type.name = :keywordTypeName)
/*@Query ("select employeeFull from Employee employeeFull where employeeFull.id in (" +
"select employee.id from Employee employee inner join employee.keywords.keywords keywords " +
"where keywords.type.name = :keywordTypeName " + //and keywords.deleted = false and employee.deleted = false)) " +
"group by employee.id " +
"order by size(employeeFull.keywords.keywords) asc)")*/
//"CASE ':ascending' WHEN 'true' THEN (size(employeeFull.keywords.keywords) asc " + //"CASE ':ascending' WHEN 'true' THEN (size(employeeFull.keywords.keywords) asc " +
//"ELSE size(employeeFull.keywords.keywords) desc END" + //"ELSE size(employeeFull.keywords.keywords) desc END" +
//"ELSE employeeFull.keywords.keywords.size desc " + //"ELSE employeeFull.keywords.keywords.size desc " +
@ -49,16 +42,5 @@ public interface SupervisorRepo extends JpaRepository<Employee, Long>, QueryDslP
public List<Long> findSupervisorsOrderedByNumKeywordsAscending( public List<Long> findSupervisorsOrderedByNumKeywordsAscending(
@Param("keywordTypeName") @Param("keywordTypeName")
String keywordTypeName); String keywordTypeName);
/* public List<Employee> findSupervisorsOrderedByNumKeywords(String keywordTypeName, Boolean asc) {
switch (asc) {
case Direction.ASC:
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
case Direction.DESC:
default:
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
}
return findSupervisorsOrderedByNumKeywordsAscending(keywordTypeName);
}*/
} }

@ -38,14 +38,9 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
@Override @Override
public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders) { public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders) {
return supervisorRepo.findAll(orders); // 218 st return supervisorRepo.findAll(orders); // // 120414: the list should return 218 employees
} }
/* @Override
public List<Employee> findSupervisorsOrderedByNumKeywords(String keywordTypeName, Sort.Direction sortDirection) {
return supervisorRepo.findSupervisorsOrderedByNumKeywords(keywordTypeName, sortDirection);
}*/
@Override @Override
public List<Employee> findSupervisorsOrderedByNumKeywordsDescending(String keywordTypeName) { public List<Employee> findSupervisorsOrderedByNumKeywordsDescending(String keywordTypeName) {
List<Long> employeeIDs = new ArrayList<Long>(); List<Long> employeeIDs = new ArrayList<Long>();
@ -77,12 +72,12 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
List<Employee> employeeList = new ArrayList<Employee>(); List<Employee> employeeList = new ArrayList<Employee>();
if(direction.equalsIgnoreCase("desc")) { if(direction.equalsIgnoreCase("desc")) {
employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction)); employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction));
employeeList.addAll(getEmployeesWithoutKeywords()); employeeList.addAll(getEmployeesWithoutKeywords(keywordTypeName));
} else { } else {
employeeList.addAll(getEmployeesWithoutKeywords()); employeeList.addAll(getEmployeesWithoutKeywords(keywordTypeName));
employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction)); employeeList.addAll(getEmployeesThatHaveKeywords(keywordTypeName, direction));
} }
return employeeList; // totalt 129 st för regular men 156 st för area och 218 för last name (vilken innehåller både keywords Area och Regular) return employeeList; // 120414: the list should return 218 employees
} }
private List<Employee> getEmployeesThatHaveKeywords(String keywordTypeName, String direction) { private List<Employee> getEmployeesThatHaveKeywords(String keywordTypeName, String direction) {
@ -109,7 +104,7 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
} }
private List<Employee> getEmployeesWithoutKeywords() { private List<Employee> getEmployeesWithoutKeywords(String keywordTypeName) {
List<Employee> employeeList = new ArrayList<Employee>(); List<Employee> employeeList = new ArrayList<Employee>();
String nativeSQL = "select " + String nativeSQL = "select " +
"role.id " + "role.id " +
@ -119,12 +114,16 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
"where " + "where " +
"role.rolename = 'Employee' and " + "role.rolename = 'Employee' and " +
"user.id = role.user_id and not exists " + "user.id = role.user_id and not exists " +
"(select " + "(select 1 " +
"1 " +
"from " + "from " +
"Employee_Keyword ek " + "Employee_Keyword ek, " +
"Keyword k, " +
"KeywordType kt " +
"where " + "where " +
"ek.role_id = role.id) " + "ek.role_id = role.id and " +
"k.id = ek.keywords_id and " +
"k.type_id = kt.id and " +
"kt.name= '" + keywordTypeName + "') " +
"order by " + "order by " +
"user.lastName asc "; "user.lastName asc ";
return runQueryAddToList(employeeList, nativeSQL); return runQueryAddToList(employeeList, nativeSQL);
@ -140,6 +139,6 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
employeeList.add(employee); employeeList.add(employee);
} }
} }
return employeeList; // 36 st + 93 st return employeeList;
} }
} }