【问题标题】: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 回答