Два запроса в одном цикле в одно время

У меня есть нативный запрос

Модель 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
);  
→ Ссылка