我是Eclipselink JPA的新手。我有一组带有多个搜索参数的复杂搜索查询,其中一些参数是可选的。有没有办法在命名查询中指定可选参数?以下方法是一种有效的方法吗? 从Product o WHERE中选择o:value为null或o.category =:value'
答案 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
就会非常强大。