如何使用CrudRepository

时间:2016-04-06 16:24:23

标签: java spring jpa spring-data

我有以下代码:

@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()项目?)

1 个答案:

答案 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);

在我看来,这样做更容易,而不会在不那么重要的问题上浪费时间。