JPA-запрос для выбора, какие несколько значений в предложении "IN"

Я хочу создать параметризованный запрос JPA для следующего оператора SQL

select * from car where (colour, speed) in (('red', 50), ('blue', 70))

этот запрос возвращает ожидаемый результат

entityManager.createQuery("from Car c where (c.colour, c.speed) in (('red', 50), ('blue', 70))", Car.class).getResultList();

Как передать текущие жестко закодированные значения в качестве параметра?

Я придумал ниже "рабочее" решение. Но я боюсь, что нет гарантии, что все пары параметров передаются в ожидаемом порядке? Я не хочу заводить "синие" машины со скоростью "50".
edit: удалено, так как не работает должным образом, см. также @Gas comment

0 ответов

Во время поиска я нашел здесь очень похожий вопрос . Возможно, это больше соответствует этой проблеме.

Однако я реализовал немного другое.

@Query("SELECT p FROM Product p "
            + "LEFT JOIN p.categories category "
            + "WHERE UPPER(p.name) LIKE UPPER(CONCAT('%', COALESCE(:searchRequest, ''), '%')) "
            + "AND UPPER(p.description) LIKE UPPER(CONCAT('%', COALESCE(:description, ''), '%')) "
            + "AND p.price BETWEEN :priceLow AND :priceHigh "
            + "AND p.averageRating >= :averageRating "
            + "AND p.archived = :archived "
            + "AND ((category.name IN :selectedCategories) "
            + "OR (:amountOfSelectedCategories = 0 AND category IN (SELECT c FROM Category c))) "
            + "GROUP BY p "
            + "HAVING SIZE(p.categories) >= :amountOfSelectedCategories"
    )
    Page<Product> findAllBySearchModel(
            Pageable pageable,
            @Param("searchRequest") String searchRequest,
            @Param("description") String description,
            @Param("priceLow") BigDecimal priceLow,
            @Param("priceHigh") BigDecimal priceHigh,
            @Param("averageRating") double averageRating,
            @Param("archived") boolean archived,
            @Param("selectedCategories") List<String> selectedCategories,
            @Param("amountOfSelectedCategories") int amountOfSelectedCategories
    );
Другие вопросы по тегам