Comment utiliser un groupe en Somme SQL avec Spring Data JPA?

Je veux charger meilleur vendeur de produits en quantité. Voici mes tables:

Product
id  name
1    AA   
2    BB

Productorder
order_id  product_id  quantity
1          1          10      
2          1          100    
3          2          15     
4          1          15       

C'est ma source de Données du Référentiel:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    @Query(value = "select top 5 p.name, sum(po.quantity) as total_quantity from product p " +
            "inner join productorder po " +
                "on p.id = po.product_id " +
            "group by p.id, p.name " +
            "order by total_quantity desc", nativeQuery = true)
    List<Product> findTopFiveBestSeller();
}

Je suis HsqlException: Colonne qui n'a pas trouvé: id

Je pense que cette erreur n'a rien à voir avec l'id de la colonne, car c'est là, pour les deux tableaux. Faire "groupe par la Somme des requêtes" travailler avec les données du Printemps? Parce qu'il semble un peu étrange pour moi, comme le Printemps de Données doit sélectionner les attributs d'un produit à partir de la base de données, et avec cela, sql, nous sélectionnons également la somme(po.la quantité). Peut-Printemps de données à traiter et convertir le résultat sous forme de Liste?

PS: je suis à l'aide de HSQLDB incorporé DB.

  • Comment pourrait une requête qui renvoie les noms et les sommes de magie retourner une Liste<Produit>, depuis un Produit dispose d'un IDENTIFIANT et d'un nom? Votre requête ne retourne pas de produits, de sorte que le type de retour ne doit pas être une Liste<Produit>
  • L'erreur est probablement à venir à partir du groupe, vous êtes en essayant de regrouper par p.id, mais il n'est pas dans votre liste de sélection.
  • Le printemps a DomainClassConverter, qui convertit les id des Objets concrets. C'est du moins ce que je pensais.. Maintenant je l'ai changé pour "select top 5 p.*" il fonctionne... Merci! "select top 5 p.id" ne fonctionne pas bien.
  • J'ai ajouté une explication de la solution, puisque à comprendre la différence entre les deux requêtes n'était pas trivial.
InformationsquelleAutor akcasoy | 2014-12-15