2014-12-15 19 views
6

En çok satılan ürünleri miktarına göre yüklemek istiyorum. Bunlar benim tablolar şunlardır:Spring Data JPA ile Sum SQL tarafından bir grup nasıl kullanılır?

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  

Bu benim Bahar Veri Deposu: bulunamadı Kolon:

@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(); 
} 

Ben HsqlException alıyorum id

Bu hata bir şey yok bence her iki tablo için olduğu gibi id sütunu ile yapmak. "Sum sorgularına göre gruplandır", Bahar verileriyle çalışır mı? Çünkü Spring Data, veri tabanından sadece ürün özelliklerini seçmeli ve bu sql ile toplamı (po.quantity) seçtikçe benim için biraz garip geliyor. Spring verileri bunu halledebilir ve sonucu bir Liste olarak dönüştürebilir mi?

PS: DB olarak gömülü HSQLDB kullanıyorum.

+3

Bir Ürünün bir kimliği ve bir adı olduğundan, adların ve toplamaların sihirli bir şekilde geri döndürülmesi bir Liste 'u nasıl iade edebilir? Sorgunuz ürünleri iade etmiyor, bu nedenle dönüş türü List

+3

olmamalıdır. Hata büyük olasılıkla gruptan geliyor, p.id ile gruplamaya çalışıyorsunuz, ancak bu sizin seçtiğiniz listenizde değil. – JMK

+0

Spring, ids concrete Objects'in dönüştürdüğü DomainClassConverter'e sahiptir. En azından düşündüğüm şey bu ... Şimdi "en iyi 5 p. * Seçtiniz" diye değiştirdim ... Teşekkürler! "En iyi 5'i seç" p.id çalışmıyor. – akcasoy

cevap

4

ben birden çok değer yerine sihirli Product nesnelere dönüştürülebilir gereken sadece Dize nesneleri seçerek olduğumu belirtmek için p.name den p.* select ifadeleri projeksiyonu değiştirdikten sonra, bu işleri:

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

    @Query(value = "select top 5 p.*, 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(); 

} 

Teşekkür @JMK ve @JB Nizet.

+1

Merhaba, Ürün çekirdeğinde total_quantity sütunu yarattınız mı? Benzer şeyler yapmaya ihtiyacım var. Fasulye seviyenizde neler yaptığını detaylandırabilirsiniz. –

+0

O dışsal pojo sınıf – TanvirChowdhury

+0

@TanvirChowdhury oluşturarak miktar kullanabilir, en azından SUM ifadesinde kullanılan sütunu eşleştirmek zorundasınız, bu durumda, 'miktar' da bu durumda depo nesnesini döndürmüyorum . Bir sütunu temsil eden her nesne ile Listesini döndürürken benim için çalışır. – theBushman

İlgili konular