2010-01-25 11 views
0

Je suis encore jeune à Hibernate et j'essaie de l'utiliser pour un site web dont j'ai hérité. Malheureusement, cela signifie parfois que les schémas db n'ont pas toujours de sens.NHibernate: Comment exclure une classe qui fait partie d'une jointure en utilisant l'API Criteria

Cela dit, je suis en train de construire la requête HQL suivante en utilisant l'API Critères

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId 

La déclaration ci-dessus HQL générer SQL qui sélectionnera et retour TableB seulement ce qui est ce que je veux arriver. Cependant, en utilisant les instructions de l'API Critera présentées ci-dessous, l'instruction SQL générée sélectionne les champs pour TableB et TableA. Dans un monde parfait, je pourrais mettre à jour les schémas db pour avoir plus de sens, mais hélas je ne peux pas. Toute aide à ce sujet serait grandement appréciée.

Répondre

2

Votre question ne montre pas les classes associées à TableA et TableB, donc je vais supposer que les classes sont TableA et TableB et que TableB a une propriété appelée TableA.

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateAlias("TableA", "a") 
    .Add(Expression.Eq("a.UserId", userId)) 
    .UniqueResult<TableB>(); 
+0

Votre hypothèse est correcte. – rmblstrp