2010-04-08 5 views
4

Actuellement, nos requêtes ajoutent une variété de Restrictions pour assurer que les résultats sont considérés actifs ou en direct. Ces restrictions sont utilisées dans plusieurs endroits/requêtes afin d'une méthode similaire à la configuration a étéCritères d'Hibernation: Ajouter des restrictions aux Critères et aux Critères Détachés

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

Cela a bien fonctionné jusqu'à présent, mais maintenant ces critères standard doit être ajouté à un sous-requête en utilisant DetachedCriteria. Existe-t-il un moyen de modifier cette méthode pour accepter des critères ou des critères détachés ou une meilleure façon d'ajouter des restrictions?

+0

Pouvez-vous me donner un peu plus d'informations? Critères et DetachedCriteria ont tous les deux des méthodes createCriteria() sur eux afin que vous puissiez créer un sous-critère et ensuite passer dans cette méthode. Je ne suis pas sûr si c'est ce que vous demandez. – rancidfishbreath

+0

Je ne pense pas puisque les ne sont pas les mêmes et ne s'étendent pas la même classe. – Gilean

Répondre

1

je fini par réécrire les requêtes donc ce ne fut plus un problème, mais avant que j'ai créé cette classe qui semblait fonctionner, mais votre kilométrage peut varier:

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()