2010-04-08 4 views
4

현재 우리 쿼리는 결과가 활성 또는 라이브로 간주되도록 다양한 Restrictions를 추가합니다. 방법은Hibernate Criteria : Criteria와 DetachedCriteria에 제한 추가

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

이 지금까지 잘 근무하고있다 유사 설치했다, 그러나 지금이 표준 기준이 DetachedCriteria를 사용하여 하위 쿼리에 추가 할 필요가 있으므로 이러한 제한은 여러 장소/쿼리에 사용됩니다. 이 메서드를 수정하여 기준 또는 DetachedCriteria를 수락하거나 더 나은 제한을 추가하는 방법이 있습니까?

+0

당신은 나에게 좀 더 많은 정보를 제공 할 수 있습니까? Criteria와 DetachedCriteria는 둘 다 createCriteria() 메소드를 가지고 있으므로 하위 기준을 작성한 다음이 메소드에이를 전달할 수 있습니다. 그게 당신이 요구하는 것이 확실하지 않습니다. – rancidfishbreath

+0

나는 똑같지 않고 같은 클래스를 확장하지 않기 때문에 나는 생각하지 않는다. – Gilean

답변

1

나는이 더 이상 문제였다 있도록 쿼리를 다시 작성하지 결국,하지만 그 전에 내가 일 듯이 클래스를 만들었지 만 마일리지가 다를 수 :

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() 
관련 문제