Java 如何在带有Crudepository的@Query中获取Set.size()
我有以下代码:Java 如何在带有Crudepository的@Query中获取Set.size(),java,spring,jpa,spring-data,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); @Query(“从曲目t中选择t加入t.a,其中a在(:艺术家)组中按t计数(t)=2”) 公共轨道findByA
@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);
@Query(“从曲目t中选择t加入t.a,其中a在(:艺术家)组中按t计数(t)=2”)
公共轨道findByArtistIgnoreCase(@Param(“艺术家”)集合艺术家);
它使用固定的计数值(如2),但我需要将其替换为artists.size(),这样它将只返回集合中所有艺术家的曲目(Track&Artister具有@ManyToMany关系)
我能让它工作的唯一方法是传递另一个@Param,它将是集合的大小,但考虑到我已经传递了对象本身,这似乎适得其反
有没有办法在查询中获取Set参数的大小,或者直接在SQL中获取它(计算in()项)?我不知道为什么您认为这会适得其反。您仍然需要计算它,因此只需传递另一个
@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);
@Query(“从曲目t中选择t加入t.a,其中a在(:艺术家)组中按t计数(t)=:大小”)
公共曲目findByArtistIgnoreCase(@Param(“艺术家”)集艺术家,@Param(“大小”)整数大小);
在我看来,这样做比较容易,不会在不太重要的问题上浪费时间。我不知道你为什么认为这样做会适得其反。您仍然需要计算它,因此只需传递另一个
@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);
@Query(“从曲目t中选择t加入t.a,其中a在(:艺术家)组中按t计数(t)=:大小”)
公共曲目findByArtistIgnoreCase(@Param(“艺术家”)集艺术家,@Param(“大小”)整数大小);
在我看来,这样做更容易,而不会在不太重要的问题上浪费时间。是的,我想我必须走这条路。只有一个更正:我认为Crudepository只接受Long作为count的参数,所以new Long(artists.size())是我每次调用此方法时都要做的另一件事……是的,我想我必须遵循这条路线。只有一个更正:我认为Crudepository只接受Long作为count的参数,所以new Long(artists.size())是我每次调用此方法时必须做的另一件事。。。