Критерии гибернации: добавление ограничений в критерии и отдельные критерии - PullRequest
4 голосов
/ 08 апреля 2010

В настоящее время в наши запросы добавлено множество ограничений, чтобы результаты считались активными или активными. Эти ограничения используются в нескольких местах / запросах, поэтому метод был настроен аналогично

 public Criteria addStandardCriteria(Criteria criteria, ...) {
      // Add restrictions, create aliases based on parameters
      //     and other non-trivial logic
     criteria.add(...);
     return criteria;
 }

До сих пор это работало нормально, но теперь этот стандартный критерий необходимо добавить в подзапрос с использованием DetachedCriteria. Есть ли способ изменить этот метод, чтобы он принимал Criteria или DetachedCriteria или лучший способ добавить ограничения?

1 Ответ

1 голос
/ 09 апреля 2010

Я закончил переписывать запросы, так что это больше не было проблемой, но до этого я создал этот класс, который, казалось, работал, но ваш пробег может отличаться:

 public class CriteriaContainer implements Serializable {

    private static final long serialVersionUID = 1L;

    private Criteria criteria = null;
    private DetachedCriteria detachedCriteria = null;

    public CriteriaContainer(Criteria criteria) {
        this.criteria = criteria;
        this.detachedCriteria = null;
    }

    public CriteriaContainer(DetachedCriteria detachedCriteria) {
        this.detachedCriteria = detachedCriteria;
        this.criteria = null;
    }

    /**
     * @param eq
     * @return 
     */
    public CriteriaContainer add(final Criterion eq) {
        if (criteria != null) {
            criteria.add(eq);
        } else if (detachedCriteria != null) {
            detachedCriteria.add(eq);
        }
        return this;
    }

    /**
     * @return the criteria
     */
    public Criteria getCriteria() {
        return criteria;
    }

    /**
     * @return the detachedCriteria
     */
    public DetachedCriteria getDetachedCriteria() {
        return detachedCriteria;
    }

    /**
     * @param associationPath
     * @param alias
     * @return 
     */
    public CriteriaContainer createAlias(final String associationPath, final String alias) {
        if (criteria != null) {
            criteria.createAlias(associationPath, alias);
        } else if (detachedCriteria != null) {
            detachedCriteria.createAlias(associationPath, alias);
        }
        return this;
    }

    /**
     * @param distinctRootEntity
     * @return 
     */
    public CriteriaContainer setResultTransformer(final ResultTransformer transformer) {
        if (criteria != null) {
            criteria.setResultTransformer(transformer);
        } else if (detachedCriteria != null) {
            detachedCriteria.setResultTransformer(transformer);
        }
        return this;
    }
}

criteria = addBasicCriteria(new CriteriaContainer(criteria), ...).getCriteria()
detachedCriteria = addBasicCriteria(new CriteriaContainer(detachedCriteria), ...).getDetachedCriteria()
...