Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在带有Crudepository的@Query中获取Set.size()_Java_Spring_Jpa_Spring Data - Fatal编程技术网

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())是我每次调用此方法时必须做的另一件事。。。