我正在搞定应该带有两个参数的方法的实现:


一个Criteria
以及Criterion的列表


我的代码实际上是:

public static void addNullSafeOrCondition(final Criteria criteria, final Criterion... conditions) {

    final List<Criterion> validCriterion = new ArrayList<Criterion>(conditions.length);

    for (final Criterion condition : conditions) {
        if (condition != null) {
            validCriterion.add(condition);
        }
    }

    if (validCriterion.size() == 0) {
        return;
    } else {
        if (validCriterion.size() == 1) {
            criteria.add(validCriterion.get(0));
        } else {
            //Can't convert list to ... varargs
            criteria.add(Restrictions.or( *** validCriterion *** ));
        }
    }

}


我找不到将ArrayList转换为varargs的任何方法,但是特别是我在寻找更好的解决方案,例如任何现有的HibernateUtils库或任何Restriction的方法(我都不知道),它们都可以创建null安全限制条件。

谢谢。

最佳答案

public static void addNullSafeOrCondition(final Criteria criteria, final Criterion... conditions) {
    if (conditions == null || conditions.length==0){
        return;
    }

    final List<Criterion> validCriterion = new ArrayList<Criterion>();

    for (final Criterion condition : conditions) {
        if (condition != null) {
            validCriterion.add(condition);
        }
    }
    if (validCriterion.isEmpty()) {
        return;
    }
    //Can't convert list to ... varargs
    criteria.add(Restrictions.or(validCriterion.toArray(new Criterion[ validCriterion.size() ]))); //public static Disjunction or(Criterion... predicates)--work's for one element also
  }


criteria.add(Restrictions.or(validCriterion.toArray(new Criterion [validCriterion.size()])));

创建自己的HibernateUtils并将您的方法移至on HibernateUtils

07-27 22:40