Spring JPA Query返回Null而不是List

时间:2016-01-27 18:52:27

标签: java spring jpa spring-data spring-data-jpa

我有一个@Entity Video 一对多关系,List<Tag> tags作为其中一个字段。我使用以下@Repository使用 Spring Data 来获取最受欢迎的代码:

@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 vs我的数据库,它返回了2 标签。但是在我的代码中,当我调用方法findMostViewedTags(100)时,我收到值 Null

查询查找策略是默认的&#34; CREATE_IF_NOT_FOUND&#34;。

  1. 如果找不到结果,该方法是否应返回空列表或 Null ?我希望的行为是获得一个空列表。
  2. 为什么方法调用返回Null而不是List<Tag>的size()2?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:3)

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