【问题标题】:findOne deosn't work, i change to findById but i got a problem in return typefindOne 不起作用,我更改为 findById 但返回类型有问题
【发布时间】:2020-02-29 17:46:21
【问题描述】:

返回类型 cp 出现错误:类型不匹配:无法从 Optional 转换为 Compte

这是在 Spring Boot 中使用 Eclipse

''Java 
@Service
@Transactional
public class BanqueMetierImpl implements IBanqueMetier{
@Autowired
 private COmpteRepository compteRepository;
 @Override
  public Compte ConsulterCompte(String codeCpte){
  Optional<Compte> cp=compteRepository.findById(codeCpte);
  if(cp==null)throw new RuntimeException("Compte Introuvable");
   return cp;

我正在尝试使用 findOne 但不起作用,所以我使用 findById 什么时候返回类型 cp 出错;

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

较新的 Spring Data 版本使用 findById 而不是 findOne,而不是返回 null,它现在返回 Optional。它永远不会返回null,而是返回Optional.empty()

重写您的代码以正确使用Optional

@Override
public Compte ConsulterCompte(String codeCpte) {
  return compteRepository.findById(codeCpte)
           .orElseThrow(() -> new RuntimeException("Compte Introuvable"));
}

另外,您可能不应该抛出一个通用的RuntimeException,而是一个更具体的。

【讨论】:

    【解决方案2】:

    这段代码应该可以工作。

    return cp.orElseThrow(()-> new RuntimeException("Compte Introuvable"));
    

    我建议您查看此guide 以了解 Optional 的工作原理。

    【讨论】:

    • 不要,使用isPresent 通常是一个不好的信号。使用orElseThrow() 消除对cp.isPresent 的需要。
    猜你喜欢
    • 2020-05-13
    • 2016-02-10
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多