【问题标题】:How to use findOne() method of CRUDRepository using Spring Boot?如何使用 Spring Boot 使用 CRUDRepository 的 findOne() 方法?
【发布时间】:2019-09-02 09:00:01
【问题描述】:

我想使用CRUDRepositoryfindOne()方法,但是无法使用。

我正在使用CRUDRepository 进行持久化。我检查了 CRUDRepository,但 findOne() 方法不可用。当我搜索 CRUDRepository 的 Javadoc 时,它显示 findOne() 方法在那里。

@Override
    public MultiplicationResultAttempt getResultById(Long resultId) {

        return attemptRepository.findOne(resultId);
    }

【问题讨论】:

  • 如果您使用的是最新版本的 Spring Data,请使用 findById 而不是 findOne
  • 但它返回一个 Optional,我不需要使用 Optional。有没有其他方法可以做到这一点?
  • 使用可选的repo.findById(id).orElse(null) 来模仿经典行为。虽然我建议使用Optional
  • 好的,我试试上面的sn-p。
  • @farhanlq: 但它返回一个 Optional,我不需要使用 Optional。有没有其他方法可以做到这一点? -> 在您自己的自定义存储库中覆盖方法 findOne,使其永远不会返回 Optional,但在内部它将使用 spring 方法:stackoverflow.com/questions/27950246/…

标签: java spring rest spring-boot repository


【解决方案1】:

findOneCRUD Repository 中被findById() 替换。见DATACMNS-944

请注意,findById 不是 findOne 的完全替代品,它返回的是 Optional 而不是 null

示例用法:

@Override
public MultiplicationResultAttempt getResultById(Long resultId) {

   return attemptRepository.findById(id).orElse(null);
}

【讨论】:

  • 所以,如果我可以将 pom.xml 中的 JPA 依赖项更改为旧版本。你认为它有效吗?
  • 是的,它会起作用,但我不建议这样做,你不使用可选的原因是什么?上面的示例与您期望 findOne 的行为完全相同
  • 仅仅更改 Spring Data JPA 版本是行不通的。它具有最小的 Spring 依赖,因此还需要您降级 Spring 版本,这反过来可能会让您也降级其他库。
  • @Mustahsan。谢谢,现在我使用了您上面的 sn-p,它可以按照我的预期工作。
  • @M.Deinum。现在我正在使用 FindById()。感谢你们俩的即时回复。
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 2017-10-21
  • 2018-08-01
  • 2016-02-12
  • 2018-02-04
  • 2019-03-28
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多