1

我正在开发一个管理帐户的应用程序。我创建了一个名为 org.sid.entities 的包,其中存在 IBanqueJob 接口及其代码下方

package org.sid.metier;

import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.springframework.data.domain.Page;

public interface IBanqueMetier {
    public Compte consulterCompte(String CodeCompte);
    public void verser(String CodeCompte,double mt);
    public void retirer(String CodeCompte, double mt);
    public void virement(String Cp1, String Cp2, double mt);
    public Page<Operation> listOperation(String cp,int page,int size);


}

以及这个接口的实现,下面是它的代码

package org.sid.metier;

import java.util.Date;

import org.sid.dao.CompteRepository;
import org.sid.dao.OperationRepository;
import org.sid.entities.Compte;
import org.sid.entities.Operation;
import org.sid.entities.Versement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class BanqueMetierImpl implements IBanqueMetier {
    @Autowired
    private CompteRepository compteRepository;
    @Autowired
    private OperationRepository operationRepository;

    @Override
    public Compte consulterCompte(String CodeCompte) {


       Compte cp = compteRepository.findById(CodeCompte);

         if (cp == null)
            throw new RuntimeException("compte introuvable");
        return cp;
    }

我在下面的这一行中有一个错误,上面写着“类型不匹配:无法从 Optional 转换为 Compte”

Compte cp = compteRepository.findById(CodeCompte);
4

2 回答 2

2

findById返回 an Optionalof something,这意味着我们要么有一个给定的结果,id要么我们没有任何结果。

为了解压这个Optional,我通常建议做的事情如下:

Compte cp = compteRepository.findById(CodeCompte).orElseThrow(() -> new Exception("Element not found!");

如果我们找不到该特定 ID 的任何内容,这将引发异常。

在某些情况下,返回一些默认值而不是抛出异常更有益。在这种情况下,我们可以使用:

Compte cp = compteRepository.findById(CodeCompte).orElse(new Compte());

或与供应商:

Compte cp = compteRepository.findById(CodeCompte).orElseGet(() -> new Compte());
于 2020-03-10T00:01:26.093 回答
2

compteRepository.findById 返回一个 Optional 因为它可能实现了 CrudRepository 接口。

所以请使用

Optional<Compte> cp = compteRepository.findById(CodeCompte);
于 2020-03-09T22:02:16.220 回答