【问题标题】:How to get Set.size() inside a @Query with CrudRepository如何使用 CrudRepository 在 @Query 中获取 Set.size()
【发布时间】:2016-04-06 16:24:22
【问题描述】:

我有以下代码:

@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),但我需要用 Artist.size() 替换它,因此它只会返回包含集合中所有艺术家的轨道(轨道和艺术家有@ManyToMany 关系)。

我可以让它工作的唯一方法是传递另一个 @Param 这将是 Set 的大小,但考虑到我已经在传递对象本身,这似乎适得其反。

有没有办法在 Query 中获取 Set 参数的大小,或者直接在 SQL 中获取(计算 in() 项)?

【问题讨论】:

    标签: java spring jpa spring-data


    【解决方案1】:

    我不知道你为什么认为它会适得其反。你仍然需要计算它,所以你可以简单地传递另一个@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);
    

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

    【讨论】:

    • 是的,我想我将不得不走这条路线。只是一个更正:我认为 CrudRepository 只接受 Long 作为计数的参数,所以 new Long(artists.size()) 是我每次调用此方法时都必须做的另一件事......
    猜你喜欢
    • 2015-10-29
    • 2018-02-20
    • 1970-01-01
    • 2017-11-03
    • 2018-04-14
    • 1970-01-01
    • 2019-07-06
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多