目前,我们的查询添加了各种限制,以确保结果被视为活动的或实时的。这些限制在多个地方/查询中使用,因此设置的方法类似于
public Criteria addStandardCriteria(Criteria criteria, ...) {
// Add restrictions, create aliases based on parameters
// and other non-trivial logic
criteria.add(...);
return criteria;
}到目前为止,这个方法运行得很好,但是现在需要使用DetachedCriteria将这个标准条件添加到子查询中。有没有办法修改这个方法以接受Criteria或DetachedCriteria,或者更好的添加限制的方法?
发布于 2010-04-09 21:58:43
我最终重写了查询,所以这不再是一个问题,但在此之前,我创建了这个类,它似乎可以工作,但您的里程可能会有所不同:
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()https://stackoverflow.com/questions/2597452
复制相似问题