春季 JPA 查询返回 Null 而不是 List

2022-09-02 00:56:20

我有一个与a作为其字段之一的一对多关系。我使用Spring Data使用以下方法来获取最受欢迎的标签:@Entity VideoList<Tag> tags@Repository

@Repository
public interface TagRepository extends CrudRepository<Tag, Integer>{
    @Query("SELECT t FROM Tag t WHERE (SELECT SUM(v.views) FROM Video v WHERE t MEMBER OF v.tags) > 0")
    public List<Tag> findMostViewedTags(int maxTags);
}

查询Spring处理并认为有效,我在本地测试了生成的SQL与我的数据库,并返回了2个标签。但是,在我的代码中,当我调用方法 findMostViewedTags(100) 时,我收到值 Null

查询查找策略是默认的“CREATE_IF_NOT_FOUND”。

  1. 如果未找到任何结果,则该方法应返回空列表还是 Null?我想要的行为是接收一个空列表。
  2. 为什么方法调用返回而不是 size() 为 2 的 a?NullList<Tag>

答案 1
  1. 如果未找到任何结果,则正常行为确实返回空列表。如果 a 是已定义接口中方法的返回值,则该方法永远不应返回 。List<Object>Null
  2. 问题在于参数被赋予了该方法,并且在 Query 中的任何位置都未使用。出于某种原因,Spring决定在这种情况下返回Null。解决方案:删除未使用的参数或在查询中使用该参数。

答案 2

我遇到过类似的问题。原因是我正在使用Mockito,并且没有正确地模拟数据。when()


推荐