Необязательный класс в весенней загрузке? - PullRequest
0 голосов
/ 10 марта 2020

Я занимаюсь разработкой приложения для управления учетными записями. Я сделал пакет с именем 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;
    }

У меня есть ошибка в этой строке ниже, которая говорит: «Несоответствие типов: невозможно преобразовать из необязательного в Compte»

Compte cp = compteRepository.findById(CodeCompte);

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

findById возвращает Optional чего-либо, что означает, что у нас либо есть один результат для данного id, либо у нас ничего для этого нет.

Для того, чтобы распаковать это Optional, я обычно советую сделать следующее:

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

Это вызовет исключение, если мы не найдем ничего для этого указанного c id.

In в некоторых случаях выгоднее возвращать какое-то значение по умолчанию, чем выдавать исключение. В этом случае мы можем использовать это:

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

или с поставщиком:

Compte cp = compteRepository.findById(CodeCompte).orElseGet(() -> new Compte());
2 голосов
/ 10 марта 2020

compteRepository.findById возвращает Optional, поскольку он, вероятно, реализует интерфейс CrudRepository.

Поэтому, пожалуйста, используйте

Optional<Compte> cp = compteRepository.findById(CodeCompte);
...