我是 Eclipselink JPA 的新手。我有一组带有许多搜索参数的复杂搜索查询,其中一些参数是可选的。有没有办法在命名查询中指定可选参数?以下方法是一种有效的方法吗?从 Product o 中选择 o WHERE :value 为 null 或 o.category = :value'
问问题
3561 次
1 回答
5
您的方法可能会奏效,但我通常在类似情况下使用Criteria API 。例如,如果提供了参数,您可以有条件地将谓词添加到您的条件查询:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> e = cq.from(Product.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (categoryValue != null)
predicates.add(cb.equal(e.get("category"), categoryValue));
if (someOtherValue != null)
predicates.add(cb.equal(e.get("someField"), someOtherValue));
// AND all of the predicates together:
if (!predicates.isEmpty())
cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
List<Product> products = em.createQuery(cq).getResultList();
这是一个丑陋的例子,但是CriteriaBuilder
一旦你熟悉了 API,它就会非常强大。
于 2013-06-06T16:58:27.487 回答