#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);
}
}