2009-08-20 4 views
1

J'ai une question sur le critère: Comment puis-je utiliser un critère (ou similaire) qui filtre et/ou faire avec d'autres critères?Utiliser un critère au-dessus d'un autre critère

Quelque chose comme:.

clients select * from (select * des clients) en tant que clients

Le vrai problème est quelque chose d'autre, mais la réalisation de ce comportement serait formidable ...

(BTW, java et .net sont les bienvenus pour aider)

grâce

+0

Pourquoi ne pas que vous publiez le vrai problème? Une solution générale ne serait pas nécessairement la meilleure pour votre cas. –

Répondre

2

Cela ne peut pas être fait, AFAIK. Le tutorial à propos de HQL dit:

Notez que les sous-requêtes HQL peuvent se produire uniquement dans les clauses select ou where.

Je ne trouve pas la même déclaration à propos des critères, mais dans API, la seule façon de créer des critères est de donner un type mappé. Il y a un support pour les sous-requêtes mais seulement dans la clause where. Here est javadoc.

+0

En fait, la chose était que je voulais l'utiliser sur la clause FROM, comme un jeu de résultats, comme avec (tsql). –

1

Votre clause FROM doit être un objet mappé. Vous pouvez faire une sous-sélection dans la clause WHERE ... quelque chose comme:

select c from clients c where c.id in (select c2.id from clients c2) 

Il serait utile si vous pouviez donner un meilleur exemple. L'exemple que vous avez donné peut être réduit au HQL suivant:

"from clients" 

... ce qui n'est pas très utile.

+0

lol, merci. Mon problème est que c'est une requête assez difficile à mettre sur les normes communes nhibernate ... Peut-être que j'ai besoin d'étudier un peu plus, pour trouver une meilleure solution. –

0

Je ne suis pas sûr de bien comprendre votre question, mais si vous voulez faire une sélection sur une liste d'objets, vous pouvez utiliser les sous-requêtes avec DetachedCriteria. Je l'utilise tout le temps, en particulier pour paginer des objets en créant une jointure externe gauche, ce qui pourrait me conduire à un nombre incorrect d'entités.

Imaginez que vous avez obtenu les utilisateurs qui achètent des produits, avec une relation beaucoup-beaucoup.

Dim dc = Comme DetachedCriteria DetachedCriteria.For (getType (utilisateur)) setFirstResult (pageNumber * itemsPerPage) .SetMaxResults (itemsPerPage) session.createCriteria (GetType (utilisateur)). Ajouter (Subqueries.PropertyIn ("Id", dc)) .CreateAlias ​​("ProductsBought", "pb", NHibernate.SqlCommand.JoinType.LeftOuterJoin)

Thom a raison, vous devriez peut-être être plus précis ...

+1

Hibernate supporte les sous-requêtes dans SELECT et WHERE caluse. L'OP est sur la sous-requête dans la clause FROM. Cela ne peut pas être fait AFAIK. –

+0

Malheureusement il a raison ... Mes intentions étaient d'utiliser sur la clause de ... –

Questions connexes