2015-12-18 2 views
1

je l'ERD suivante:requête JPQL avec l'agrégation « somme » ne fonctionne pas comme prévu

enter image description here

Je veux sélectionner la somme de groupe salarial des employés par région, mais mon instruction select does't fonctionne comme prévu.

Voici le code pour cette requête:

@SuppressWarnings("unchecked") 
public Salary findByRegion(String region) { 
    return (Employee) getEntityManager() 
      .createQuery("select sum(e.employeeJob.salary) from Employee e where " 
        + "e.employeeDepartment.departmentLocation.locationCountry.countryRegion = :region") 

      .setParameter("region", "%" + region + "%") 
      .getSingleResult(); 
} 

Qu'est-ce que je fais de mal à cela?

+4

Quel cadre de persistance utilisez-vous? JPA, autre? S'il vous plaît ajouter une balise pour le rendre clair. Aussi, s'il vous plaît soyez clair sur ce que vous voulez dire quand vous dites * ça ne marche pas *. C'est une déclaration très vague. Avez-vous une erreur? Avez-vous des résultats incorrects? Si oui, quelle erreur, ou quels résultats obtenez-vous, et quels sont vos résultats attendus? – sstan

+0

Oui, j'utilise jpa. Le salaire est une partie d'une autre table, de sorte que cette déclaration n'a rien retourné quand je l'ai exécuté. A côté j'ajoute cette instruction select dans la classe employeeDao. Je ne suis pas sûr de pouvoir la laisser là ou de créer une autre classe Dao – Kranatos

+0

e.employeeJob.salary ?? Je n'ai pas vu le champ Salaire dans l'objet Tâche. Je vois seulement minSalary et maxSalary dans l'objet du travail. –

Répondre

-1

Vous devez utiliser "COMME" opérateur au lieu de "=" si vous voulez utiliser "%". Modifiez votre code en utilisant ce code ci-dessous:

@SuppressWarnings("unchecked") 
public Salary findByRegion(String region) { 
return (Employee) getEntityManager() 
     .createQuery("select sum(e.employeeJob.salary) from Employee e where " 
       + "e.employeeDepartment.departmentLocation.locationCountry.countryRegion LIKE :region") 

     .setParameter("region", "%" + region + "%") 
     .getSingleResult(); 
} 
0

L'une des raisons pour lesquelles votre déclaration de JPQL ne donne pas vous les résultats escomptés peuvent être un nom de champ manquant de l'entité des régions à la fin de votre expression de chemin: e.employeeDepartment.departmentLocation.locationCountry.countryRegion au lieu de e.employeeDepartment.departmentLocation.locationCountry.countryRegion.region_name