1

我是 Eclipselink JPA 的新手。我有一组带有许多搜索参数的复杂搜索查询,其中一些参数是可选的。有没有办法在命名查询中指定可选参数?以下方法是一种有效的方法吗?从 Product o 中选择 o WHERE :value 为 null 或 o.category = :value'

4

1 回答 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 回答