Исключение недопустимого аргумента в методе @Override findAll

#java #mysql #spring-boot #jpql

#java #mysql #весенняя загрузка #jpql

Вопрос:

Я хочу вернуть список со всеми объектами из базы данных, проблема в том, что у меня есть два внешних ключа, один может быть нулевым (almacen), а другой не может (insumo), поэтому, когда я пытаюсь переопределить метод findAll, отображается исключение недопустимого аргумента.

Объект AlertaStock — idAlerta(int), insumo (Insumo), almacen (Almacen), stockMinimo(double), activo (boolean)

code Сущность приписывает:

 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idAlerta;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idInsumo", nullable = false)
private Insumo insumo;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idAlmacen")
private Almacen almacen;

@Column(name = "sotckMinimo", nullable = false)
private double stockMinimo;

@Column(columnDefinition = "boolean default true")
private Boolean activo;
 

Getters() и Setters()

code Репозиторий:

 public interface AlertaStockBD extends JpaRepository<AlertaStock, Integer> {

    @Override
    @Query(value="SELECT x FROM AlertaStock x "  
            "INNER JOIN FETCH x.insumo "  
            "LEFT JOIN FECTH x.almacen "  
            "WHERE x.activo=1")
    List<AlertaStock> findAll();
}
 

code Служба:

  public ResponseEntity<?> getAllAlertas(){

        try {
            List<AlertaStock> alertas = alertaStockBD.findAll();
            for (AlertaStock a: alertas) {
                a.getInsumo().setIdTipoInsumo(null);
            }
            return ResponseEntity.ok(alertas);
        }
        catch (Exception e){
            return ResponseEntity.badRequest().body("Ocurrio un problema ->"   e);
        }
    }
 

Комментарии:

1. и самая важная часть, полная трассировка стека не учитывается .

Ответ №1:

Я мог бы это исправить, просто измените метод обслуживания следующим образом:

 public ResponseEntity<?> getAllAlertas(){
    try {
        int idAlmacen = 0;
        List<AlertaStock> alertas = alertaStockBD.findAll();
        for (AlertaStock a: alertas) {
            a.getInsumo().setIdTipoInsumo(null);
            if (a.getAlmacen() != null) {
                Optional<Almacen> almacen = almacenBD.findById(a.getAlmacen().getIdAlmacen());
                if (almacen.isPresent()){
                    a.setAlmacen(almacen.get());
                }
            }
        }
        return ResponseEntity.ok(alertas);
    }
    catch (Exception e){
        return ResponseEntity.badRequest().body("Ocurrio un problema ->"   e);
    }
}