如何参数化单个查询
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 的回答以获得更安全的参数设置方式
我想要一个包含所有所选类别的查询 就像是 : 在 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 的回答以获得更安全的参数设置方式