Два запроса в одном цикле в одно время
У меня есть нативный запрос
Модель ResultTable
@Entity
@Immutable
@Table(name = "stages")
public class ResultTable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
private int id;
@Column(name = "stage")
private int stage;
@Column(name = "order_number")
private String orderNumber;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStage() {
return stage;
}
public void setStage(int stage) {
this.stage = stage;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
@Column(name = "field")
private String field;
}
Репозиторий
@Query(nativeQuery = true, value = "SELECT * FROM stages WHERE order_number = ?1 AND stage= ?2 ")
List<ResultTable> findAllStagesOfOrderNumber(int orderNumber, int stage);
Сервис-класс
@Service
public class ResultTableServiceImpl implements ResultTableService {
private final ResultTableRepository resultTableRepository;
public ResultTableServiceImpl(ResultTableRepository resultTableRepository) {
this.resultTableRepository = resultTableRepository;
}
public List<ResultTable> resultTableAll(){
return resultTableRepository.findAll();
}
public List<ResultTable> findAllByOrderNumberAndStage(int orderNumber, int stage){
return resultTableRepository.findAllStagesOfOrderNumber(orderNumber, stage);
}
}
Который вызывается в контроллере в цикле
stagesListByRequest.forEach((resultTableVariable) -> {
System.out.println(spares.getOrderNumber() + " " + resultTableVariable);
resultTableList = resultTableServiceImpl.findAllByOrderNumberAndStage(getStagesSystemVariable(), resultTableVariable);
});
stagesListByRequest- коллекция List.resultTableVariable- переменная типа int
Но получается так что это 2 разных запроса выполняющих последовательно.
Как я могу объединить их, чтобы получить цельный запрос?
Или есть возможность выполнять его как-то по другому?
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
@Query("FROM stages WHERE order_number = :orderNumber AND stage in :stateIds ")
List<ResultTable> findAllStagesOfOrderNumber(int orderNumber, List<Integer> stageIds);
И вызывайте
List<Integer> stagesListByRequest = ...
resultTableList = resultTableServiceImpl.findAllByOrderNumberAndStage(
getStagesSystemVariable(), stagesListByRequest
);