0

我想要一个包含所有选择的类别的查询,例如:在 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

但参数化

4

2 回答 2

0

鉴于我了解您要执行的操作,您可以尝试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 答案

于 2021-04-08T22:14:02.410 回答
0

您可以使用以下语法:

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

现在,我不知道你是如何映射 a 的Category,但如果它是一个实体并且Product有一个 field 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。

于 2021-04-08T21:53:59.463 回答