2016-04-06 16 views
1

ile @query iç Set.size() almak için nasıl Aşağıdaki kodu vardır:CrudRepository

Bu COUNT için sabit bir değer ile çalışır
@Query("SELECT t FROM Track t JOIN t.artists a WHERE a IN (:artists) GROUP BY t HAVING COUNT(t) = 2") 
public Track findByArtistIgnoreCase(@Param("artists") Set<Artist> artists); 

(gibi 2), ama o değiştirmeniz gerekiyor artist.size() ile yalnızca Track'i tüm sanatçılarla birlikte geri yükleyecektir (Track & Artist'in @ManyToMany ilişkisine sahip olması).

Çalıştırmamın tek yolu, Set'in boyutu olan başka bir Param'ı geçmek, ancak nesnenin kendisini geçirdiğimi düşünürsek karşı üretken gibi görünmesidir.

Sorguda bu Set parametresinin boyutunu almanın veya doğrudan SQL'de almanın bir yolu var mı (in öğeleri())?

cevap

0

Neden bunun neden üretken olduğunu düşündüğünüzü bilmiyorum. Hala hesaplamanız gerekecek, böylece başka bir @Param iletebilirsiniz.

@Query("SELECT t FROM Track t JOIN t.artists a WHERE a IN (:artists) GROUP BY t HAVING COUNT(t) = :size") 
public Track findByArtistIgnoreCase(@Param("artists") Set<Artist> artists, @Param("size") Integer size); 

Benim düşünceme göre, bu kadar önemli bir konuda zaman kaybetmeden bu şekilde gitmek daha kolay.

+0

Evet, sanırım bu rotaya gitmem gerekecek. Sadece bir düzeltme: CrudRepository sadece Long'u saymak için bir param kadar uzun kabul eder Long (artists.size()), her seferinde bu yönteme başvurduğum bir başka şeydir ... – Henkes

İlgili konular