【问题标题】:how to parametrize a single query如何参数化单个查询
【发布时间】:2025-12-13 02:05:01
【问题描述】:

我想要一个包含所有选定类别的查询 就像是 : 在 ProductDao 中

enter public List<Product> listselected(List <Product> selectedCategories) { 
     TypedQuery<Product> findQuery = em
            .createQuery(
                    "SELECT DISTINCT p FROM Product p WHERE p.idcategory='1' AND p.idcategory='2' etc ORDER BY p.idproduct",
                    Product.class);
    return findQuery.getResultList();} here

但参数化

【问题讨论】:

    标签: jpa sql-parametrized-query


    【解决方案1】:

    您可以使用以下语法:

    em.createQuery("SELECT DISTINCT p FROM Product p WHERE p.idcategory IN (:categories) ORDER BY p.idproduct", Product.class)
             .setParameter("categories", selectedCategories)
             .getResultList();
    

    现在,我不知道您是如何映射Category,但如果它是一个实体并且Product 有一个字段category,您可以重写查询:

    List<Category> selectedCategories =...;
    em.createQuery("SELECT DISTINCT p FROM Product p WHERE p.category IN (:categories) ORDER BY p.idproduct", Product.class)
             .setParameter("categories", selectedCategories)
             .getResultList();
    

    我不知道这是否是标准 JPA,但它应该适用于 Hibernate ORM。

    【讨论】:

      【解决方案2】:

      鉴于我了解您要执行的操作,您可以尝试在查询中使用 IN 运算符:

      TypedQuery<Product> findQuery = em
                  .createQuery(
                          String.format("SELECT DISTINCT p FROM Product p WHERE p.idcategory IN (%s) ORDER BY p.idproduct", selectedCategories),
                          Product.class);
      

      编辑:有关设置参数的更安全方法,请参阅 Davides 回答

      【讨论】: