如何参数化单个查询

how to parametrize a single query

我想要一个包含所有所选类别的查询 就像是 : 在 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

但已参数化

您可以使用以下语法:

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 一起使用。

鉴于我了解您要执行的操作,您可以尝试在查询中使用 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 的回答以获得更安全的参数设置方式