2009-07-14 6 views
1

Je dois mettre en œuvre un formulaire de requête donnant à l'utilisateur la possibilité de construire ses propres critères, basé sur la sélection d'une propriété, un opérateur (=, <>, comme, pas comme dans, pas dans ...) et une valeur, combinant ceux avec des opérateurs logiques AND, OR. Je voulais stocker critères dans une entité distincte dans mon DB.utilisateur NHibernate requête définie

Quelqu'un at-il eu ce genre d'exigence avant? Quel chemin dois-je suivre: ICriteria ou HQL? Y a-t-il une autre option?

Je suis très thankfull pour toutes les idées, suggestions, pointeurs ...

thx mil. Darko

Répondre

2

J'ai mis en œuvre une exigence assez similaire. J'utilise l'API Criteria, car vous n'avez pas besoin d'utiliser les opérations de chaîne pour vous mettre en requête, ce qui le rend plus stable.

J'ai posté un exemple simple dans this question, comment mettre une requête dynamique ensemble.

Dans notre solution, je n'autorisais pas les opérations OU, car cela rendait la tâche très compliquée (et aussi l'interface utilisateur) et les performances pouvaient être mauvaises. Mais plus tard, nous l'appliquerons probablement aussi.

Les décisions de conception doivent être prises en fonction de vos besoins et de la complexité de vos requêtes et de la structure de vos données.

Par exemple, j'ai créé une classe de filtre pour chaque requête. La classe de filtre contient des champs prédéfinis. Cela le rend plus stable, car vous savez toujours quels champs peuvent être présents et pouvez les placer à certains endroits dans la requête. Certains champs nécessitent des sous-requêtes. Dans notre cas, il est impossible de le rendre entièrement générique (cela signifie que toutes les informations sur la manière dont la requête doit être créée sont stockées dans le filtre). Il existe une méthode spécifique pour chaque classe de filtre pour le transformer en une requête. Cela vous donne beaucoup de flexibilité.

Mes critères consistent en une référence à un champ, un opérateur (enum) et un argument.

Questions connexes