Voglio caricare i prodotti più venduti per quantità. Queste sono le mie tabelle:Come utilizzare un gruppo con Sum SQL con Spring Data JPA?
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
Questa è la mia Primavera Data Repository:
@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();
}
sto ottenendo HsqlException: Colonna non trovato: id
penso che questo errore non ha nulla fare con la colonna id, come è lì per entrambe le tabelle. Le query "raggruppa per Sum" funzionano con i dati di Spring? Perché mi sembra poco strano visto che Spring Data dovrebbe selezionare solo gli attributi del prodotto dal database e con questo sql selezioniamo anche la somma (po.quantità). I dati Spring possono gestirli e convertire il risultato in una lista?
PS: Sto usando HSQLDB incorporato come DB.
In che modo una query che restituisce nomi e somme restituisce magicamente un elenco, poiché un prodotto ha un ID e un nome? La tua query non restituisce i prodotti, quindi il tipo restituito non dovrebbe essere Elenco –
L'errore probabilmente proviene dal gruppo, stai cercando di raggruppare per p.id ma non è nella tua lista di selezione. – JMK
Spring ha DomainClassConverter, che converte da oggetti concreti ids. Almeno questo è quello che pensavo .. Ora l'ho cambiato in "seleziona i primi 5 p. *" Funziona ... Grazie! "select top 5 p.id" non funziona però. – akcasoy