2009-09-24 14 views
2

j'ai un IDictionary sur un objet qui je charge le mappage suivant:(Isolé) Critères équivalents pour la fonction « indice » de HQL

public class InternalFund : IInternalFund 
{ 
    public virtual IDictionary<DateTime, IValuation> Valuations { get; set; } 
} 

<class name="InternalFund"> 
     <map name="Valuations"> 
     <key> 
      <column name="FundID" /> 
     </key> 
     <index type="DateTime" column="ValuationDate" /> 
     <one-to-many class="Echo.EchoDomain.Portfolio.Valuation" /> 
     </map> 
</class> 

Cela fonctionne bien, l'objet d'évaluation n'a pas ValuationDate dessus mais Nhibernate charge le ValuationDate dans la clé du dictionnaire comme désiré. Je veux interroger le InternalFund en récupérant juste une évaluation en spécifiant le VaalDate. J'ai réussi à le faire en utilisant l'indice() dans HQL:

"from InternalFund i left join fetch i.Valuations v where index(v)='2009-09-30'" 

Encore une fois c'est fantastique et exactement ce que je veux produire ce qui suit where:

((valuations1_.ValuationDate='2009-09-30')) 

Mais je voudrais vraiment aimez faire cela dans un DetachedCriteria pour préserver la santé mentale de mon projet. Lorsque je tente

.Add(Restrictions.Eq("index(Valuations)", valuationDate)); 

Ou

.CreateAlias("Valuations", "v", JoinType.LeftOuterJoin) 
.Add(Restrictions.Eq("index(v)", valuationDate)); 

Il dit:

QueryException: could not resolve property: index(v) of: Echo.EchoDomain.Fund.InternalFund 

Y at-il un moyen d'exécuter l'index() avec un DetachedCriteria?

Merci

Stu

Répondre

1

je crois qu'il est impossible (encore?)

Voir this fonctionnalités/Demande d'amélioration sur NHibernate JIRA.