L'interrogation sur Collecte avec Nhibernate Critères de l'Api?
J'ai une "Succession" de l'entité, et cette entité dispose d'une collection "EstateFeatures"(type:EstateFeature) et EstateFeature a une propriété "MyFeatureValue".
Remarque: Ces sont limitées propriétés de la question. Toutes les Entités dispose d'un Identifiant et tous les etc
Immobilier
IList<EstateFeature> EstateFeatures;
EstateFeature
FeatureValue MyFeatureValue;
FeatureValue
public virtual long Id;
J'essaie d'obtenir des biens Immobiliers qui ont le FeatureValue.Id
DetachedCriteria query = DetachedCriteria.For<Estate>();
Conjunction and = new Conjuction();
foreach (var id in idCollection)
and.Add(Expression.Eq("MyFeatureValue.Id",id);
query
.CreateCriteria("EstateFeatures")
.Add(and);
IList<Estate> estates = query.GetExecutableCriteria(session).List<Estate>();
Rien retourné à partir de cette requête, je fais quelque chose de mal ?
Grâce
OriginalL'auteur Barbaros Alp | 2009-02-10
Vous devez vous connecter pour publier un commentaire.
Vous devez vous assurer que vous vous joignez à MyFeatureValue un temps pour chaque fonctionnalité que vous souhaitez à votre Succession à avoir.
Une façon est d'appeler .CreateAlias pour chaque itération, de lui donner un alias unique puis ajouter l'expression "aliasX.Id"
Ne marche pas vraiment rappeler comment la syntaxe va, a écrit ce hors de ma tête, vous ne savez pas si vous devez redeclare requête 🙂
Cependant, je pense que cela vous aidera à démarrer.
EDIT: Depuis un bogue dans l'API criteria vous empêcher de l'associant à une collection plusieurs fois à l'aide CreateAlias ou CreateCriteria, vous devez recourir à HQL.
http://derek-says.blogspot.com/2008/06/duplicate-association-path-bug-in.html
(Hibernate souffre du même problème aussi)
vous aurez besoin de construire les requêtes HQL de manière dynamique, de sorte que votre alias devient unique (fv1, f v2, fvX ...)
À droite, c'est un peu un bug dans les Critères de l'API. Vous devrez recourir à la HQL parce que je ne pense pas qu'ils ont fixé.
Grâce jishi, je vais essayer de savoir. revenir quand j'en aurai terminé avec elle.
OriginalL'auteur jishi
Si je comprends bien, je pense que quelque chose comme cela pourrait fonctionner
Mis à jour pour fonctionner avec une liste d'Id
OriginalL'auteur Remmus
Ce que la requête n'a NHibernate générer pour vous ? Vous pouvez le vérifier en utilisant la show_sql config de la propriété.
Comme je le vois à votre requête, vous essayez d'obtenir tous les domaines qui ont un ensemble donné de caractéristiques.
Je pense, cela va générer une requête qui ressemble à
Si vous voulez récupérer tous les dossiers qui contiennent toutes les fonctionnalités, je pense que vous aurez à utiliser une Disjonction, de sorte que NHibernate récupère tous les dossiers qui ont au moins une de ces caractéristiques.
Ensuite, dans votre code, vous devrez inspecter chaque Succession dans votre "code client", de sorte que vous finalement juste à la fin avec des Successions qui ont toutes les caractéristiques.
Je ne sais pas si il existe un moyen efficace de laisser NHibernate gérer cela ...
Pourriez-vous expliquer cela plus détaillée ? "Puis, dans votre code, vous devrez inspecter chaque Succession dans votre "code client", de sorte que vous finalement juste à la fin avec des Successions qui ont toutes les fonctionnalités".
OriginalL'auteur Frederik Gheysels
Le code ressemble vous êtes de passage dans une liste de FeaturesValueIds et que vous voulez une Liste qui est l'ensemble de ces fonctionnalités. Si c'est le cas, je voudrais prendre un coup d'oeil à la requête SQL est généré, et l'exécuter sur la base de données pour voir si vous devriez être de retrouver quoi que ce soit.
Sinon, si vous êtes à la recherche pour une Liste qui a toutes les Fonctionnalités que vous êtes de passage, vous devez utiliser une Disjonction plutôt que d'une Conjonction.
{DetachableCriteria(MyFeatureValue.Id = 7 et MyFeatureValue.Id = 8 et MyFeatureValue.Id = 9 et MyFeatureValue.Id = 10 et MyFeatureValue.Id = 11 et MyFeatureValue.Id = 12 et MyFeatureValue.Id = 16)} C'est la requête(DetachedCriteria)
Ce n'est pas ce que vous avez obtenu à partir de show_sql est-il?
Non c'est le détachement des Critères, sql est sur le chemin
J'ai posté la requête sql
OriginalL'auteur RKitson
Je ne vois pas dans les Critères où vous demandez pour les Successions où CategoryID = 3, ce qui pourrait avoir quelque chose à faire avec elle.
n'est-il pas le "où" CategoryID "=3" OÙ this_.CategoryId = @p0
Droit, mais où sont le demander à vos Critères?
ohhh, je vois. Il est sur le côté supérieur du code. C'est pourquoi je n'ai pas mentionné à ce sujet. aussi, j'ai essayer sans category= 3 , le résultat est le même. Recommandez-vous quelque chose d'autre ou je suis sur la mauvaise voie ?
OriginalL'auteur Barbaros Alp
Il semble que vous souhaitez
or
(Disjunction
) au lieu deand
(Conjunction
). Maintenant, vous êtes à la recherche pourEstateFeature
s objets, de sorte que chaque objet possède plusieurs différentsId
s, ce qui ne semble pas être ce que vous voulez.L'essayer, et de voir quels sont les résultats que vous obtenez. L'édition de ma réponse, pour ajouter cet....
J'ai essayé avant, ok j'arrive Successions, mais une Succession vient plus d'une fois. J'ai utiliser la requête .SetResultTransformer(nouveau NHibernate.Transformer.DistinctRootEntityResultTransformer()); mais il ne marche pas très bien avec ma pagination. SetMaxResults et SetFirstResult
Il ne Distincts les valeurs de chaque page dans les résultats ensemble, je sais que c'est un autre sujet, mais avez-vous une idée à ce sujet
OriginalL'auteur yfeldblum
J'ai aussi essayé cela, mais le résultat est le même:
OriginalL'auteur Barbaros Alp