我有以下代码:
@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);
它使用COUNT的固定值(如2),但我需要将其替换为artists.size(),因此它只会返回集合中所有艺术家的轨道(Track&amp; amp; amp; amp; amp; amp; ;艺术家有@ManyToMany关系。)
我能使它工作的唯一方法是传递另一个@Param,这将是Set的大小,但考虑到我已经传递了对象本身,这似乎适得其反。
有没有办法在Query中获取Set参数的大小,或者直接在SQL中获取它(计算in()项目?)
答案 0 :(得分:0)
我不知道为什么你认为它适得其反。您仍需要计算它,因此您只需传递另一个@Param
。
@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);
在我看来,这样做更容易,而不会在不那么重要的问题上浪费时间。