Spring JPA Query返回Null而不是List

Vje*_*tje 11 java spring jpa spring-data spring-data-jpa

我有一个@Entity Video一个一对多有关系,List<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);
}
Run Code Online (Sandbox Code Playgroud)

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

查询查找策略是默认的"CREATE_IF_NOT_FOUND".

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

Vje*_*tje 16

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

  • "解决方案"应该包括在Spring上提出一个bug来更好地迎合这种情况 (6认同)
  • @osmingo到这里来。.https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.nullability`保证返回集合,集合替代项,包装器和流的存储库方法从不返回null,而是返回相应的空表示形式。 (2认同)

use*_*134 7

我也遇到过类似的问题。原因是我正在使用 Mockito 并且没有正确地使用when().