可选或空参数JPA

时间:2013-06-06 14:12:42

标签: jpa eclipselink

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

1 个答案:

答案 0 :(得分:3)

您的方法可能会奏效,但我通常在类似的情况下使用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();

这是一个丑陋的例子,但是一旦你熟悉了API,CriteriaBuilder就会非常强大。