Bonjour,
Est-il possible de spécifier au niveau de l'instance ICriteria de ne récupérer que les éléments distincts ?
Ou encore de faire l'equivalent de select distinct ??
Merci d'avance,
Mow
Version imprimable
Bonjour,
Est-il possible de spécifier au niveau de l'instance ICriteria de ne récupérer que les éléments distincts ?
Ou encore de faire l'equivalent de select distinct ??
Merci d'avance,
Mow
Exactement comme un DISTINCT en SQL, pas faisable actuellement semble-t-il.
.SetResultTransformer(NHibernate.CriteriaUtil.DistinctRootEntity) s'en approche, mais c'est pas tout à fait la même chose (le filtrage ne se fait pas dans la base)
Sinon il faut passer par du HQL.
Merci pour la réponse.
Je me permets de continuer avec une autre question (pour une fois que je tombe sur quelqu'un qui connait/utilise les ICriteria).
Apparemment sur les ICriterion tels que AddOrder, on ne peut ordonner que des proprietes de notre entity. Me le confirmes-tu ?
Sinon, pour info j'utilise du HQL dans d'autres cas.
Ca m'embête pas que je puisse pas utiliser dans tous les cas les requetes du genre ICriteria je trouvais ca trop intéressant... Pour l'ensemble des formulaires de recherches de l'application je passais par un même template ; les paramètres étaient l'entity, jointure et filtre.
Je suis intéressé aussi par des tutoriaux sur le mode d'interrogation sur NHIbernate (autre que ceux du site bien sûr !!
D'avance et encore merci,
Mow
Ni l'un ni l'autre :)Citation:
Envoyé par mow
J'ai survolé, mais je tourne essentiellement au HQL (plus facile pour les tests :)
Le coup du DistinctRootEntity ça vient de http://forum.hibernate.org/ :)
Confirmer non (pas trop creusé ça donc), mais ça semblerait logique. Sur quoi d'autre est-ce que tu voudrais pouvoir trier ? Toute la requête est faite à partir des propriétés des objets après tout.Citation:
Envoyé par mow
À part http://www.hibernate.org/365.html je suis à sec :)Citation:
Envoyé par mow
Merci pour tes réponses et tes liens...
Oui, on ne peut trier que sur les propriétés des objets mais ils arrivent que ces propriétés représentent eux-même des objets et ces objets eux aussi ont des propriétés. Et ce sont ces propriétés que je désire atteindre.Citation:
Confirmer non (pas trop creusé ça donc), mais ça semblerait logique. Sur quoi d'autre est-ce que tu voudrais pouvoir trier ? Toute la requête est faite à partir des propriétés des objets après tout.
Merci,Mow
Bonjour je me permets de poster ma question ici, car elle a aussi un rapport avec Nhibernate et ICriteria
J'ai 2 tables :
THEME (IDTHEME, LIBELLETHEME)
OBJECTIF (IDOBJECTIF, LIBELLEOBJECTIF,IDTHEME)
Dans la table OBJECTIF j'ai un IDTHEME (un objectif se rapporte toujours à un thème)
Je veux créer une liste des objectifs, triés pas le libelle de leurs thèmes.
J'aiirive a trier ma liste par le libellé de l'objectif. Mon mapping marche dans ce cas.
Dans ma classe Objectif, j'ai des propriétés suivantes:
ça marche ==>Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public class Objectif { private int _idObjectif; private string _libelleObjectif; private Theme _theme; public Objectif() { } public virtual int IdObjectif { get { return _idObjectif; } set { _idObjectif = value; } } public virtual string LibelleObjectif { get { return _libelleObjectif; } set { _libelleObjectif = value; } } public virtual Theme Theme { get { return _theme; } set { _theme = value; } } public virtual string LibTheme { get { return _theme.LibelleTheme; } set { _theme.LibelleTheme = value; } } }
ça marche pas ==>Code:
1
2
3 ICriteria criteres = session.CreateCriteria(typeof(Objectif)); criteres.AddOrder(Order.Asc("LibelleObjectif"));
Code:
1
2
3 criteres.AddOrder(Order.Asc("Theme.LibelleTheme")); criteres.AddOrder(Order.Asc("LibTheme"));
si j'ecris ==>
ca trie, mais par ll IDTHEME, mais moi je veux par libelleThemeCode:
1
2 criteres.AddOrder(Order.Asc("Theme"));
HS : vive linq :)
bon, j'ai trouvé moi meme :P
Code:
1
2
3
4 ICriteria criteres = session.CreateCriteria(typeof(Objectif)); ICriteria critTheme = criteres.CreateCriteria("Theme"); critTheme.AddOrder(Order.Asc("LibelleTheme"));