Spring JpaRepository findAll 方法执行静默返回空/无数据

问题描述 投票:0回答:4

在我的生产代码中,我使用了 spring JPARepository.findAll 方法,我们怀疑它的执行之一返回了一个空列表(尽管 db 表有数据)而不是抛出一个破坏下游代码的异常。我们没有调试日志来查看实际返回的内容。 findAll 的可用文档不多。 findAll 是否有可能返回空数据(尽管数据库中存在数据)?

java spring spring-data-jpa spring-data
4个回答
1
投票

只需从您的 catch 块返回一个空列表:

catch (Exception e){
  Log.error(e);
  return new ArrayList<POJO>();
}

0
投票

不确定这是否回答了您的问题,但是 Spring Data JPA findAll 方法肯定可以返回一个空列表 - 尽管如果该特定表上有数据则不会这样做。

您可以通过这种方式在代码中处理此问题:

List<Entity> entities = entityRepository.findAll();
    
if (entities.isEmpty()) {
    // handle this use case here
}

0
投票

我有一个类似的问题,其中 repository.findById(id) 会返回一个结果,而 repository.findAll() 会返回空。 问题是我用 @Transactional(readOnly = true) 包装了调用方方法,该方法将写入然后读取所有记录:

@Override
    @Transactional(readOnly = true)
    public List<Object> writeThenReadAll(...){
       repository.save(...);
       ...
       Object byId = repository.findById(1L).get(); //return record
       List<Object> all = repository.findAll(); //empty List
       return all;
    }

@Transactional(readOnly = true) 更改为 @Transactional(readOnly = false) 解决了这个问题。


0
投票

我在使用 JPARepository 时遇到了同样的问题,我的问题通过 在您调用此方法的位置使用控制器内部的@Autowired 注释。

© www.soinside.com 2019 - 2024. All rights reserved.