2010-08-25 21 views
1

J'ai une relation many-to-many entre Project et Site. J'essaie de récupérer une liste de sites pour un projet en utilisant l'API Criteria. J'ai ceci fonctionnant mais la question sélectionne également toutes les colonnes pour les projets associés, que je ne veux pas. J'ai écrit ce que je pensais être une requête équivalente en utilisant HQL et il ne sélectionne que les colonnes Site. Comment puis-je limiter la version de l'API Criteria (target2) pour ne sélectionner que les colonnes Site? Comment puis-je limiter la version de l'API Criteria (target2)? J'ai essayé d'utiliser Projections mais il n'y a pas de méthode pour projeter un type. Je dois utiliser l'API Criteria dans ce cas.Effectuer une requête many-to-many sans sélectionner tous les objets à l'aide de l'API Criteria

Répondre

1

Je ne suis pas sûr que ce soit la meilleure façon, mais je l'ai eu à travailler à l'aide SqlProjection:

Session.CreateCriteria<T>("foo") 
      .CreateAlias("foo.Bar", "bar") 
      .SetProjection(Projections.SqlProjection("{alias}.*", new string[] {}, new IType[] {})) 
      .SetResultTransformer(new AliasToBeanResultTransformer(typeof(Foo))) 
      .List<Foo>(); 

Cela produit l'instruction SQL suivante:

SELECT this_.* FROM Foo this_ inner join Bar b1_ on this_.BarId=b1_.Id