首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate Criteria:向Criteria和DetachedCriteria添加限制

Hibernate Criteria:向Criteria和DetachedCriteria添加限制
EN

Stack Overflow用户
提问于 2010-04-08 11:46:05
回答 1查看 3.7K关注 0票数 4

目前,我们的查询添加了各种限制,以确保结果被视为活动的或实时的。这些限制在多个地方/查询中使用,因此设置的方法类似于

代码语言:javascript
复制
 public Criteria addStandardCriteria(Criteria criteria, ...) {
      // Add restrictions, create aliases based on parameters
      //     and other non-trivial logic
     criteria.add(...);
     return criteria;
 }

到目前为止,这个方法运行得很好,但是现在需要使用DetachedCriteria将这个标准条件添加到子查询中。有没有办法修改这个方法以接受Criteria或DetachedCriteria,或者更好的添加限制的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-09 21:58:43

我最终重写了查询,所以这不再是一个问题,但在此之前,我创建了这个类,它似乎可以工作,但您的里程可能会有所不同:

代码语言:javascript
复制
 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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2597452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档