2010-07-21 6 views
2

Est-ce que quelqu'un sait comment créer une vue depuis Hibernate avec les résultats d'une requête de critères?Création de vues de base de données avec NHibernate

Nous avons des parties héritées de notre application qui utilisent les vues générées par l'application pour la récupération de données et j'aime lier les nouvelles choses de NHibernate dans celles pour une friction minimale.

Je le transformer en une méthode d'extension pour que je puisse éventuellement faire des choses comme ceci:

session.CreateCriteria<Thing>().CreateReportView().List(); 

Toutes les idées?

Le processus actuel est comme ceci:

SQLString = _bstr_t("SELECT name FROM User WHERE Retired = false"); 

...run the query process the results, then... 

SQLStringView = _bstr_t(" \ 
    BEGIN EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW ") + ViewName + _bstr_t(" AS ") + SQLString; 

Donc chaque fois que nous courons cette requête nous obtenons une vue qui a les mêmes données qu'il contient. Je ne peux pas savoir comment répliquer ceci est hibernate cependant.

+0

Les vues existent déjà dans votre base de données? Ou votre application les crée-t-elle à la volée? – mxmissile

+0

L'application les crée actuellement à la volée en utilisant ADO. Nous déplaçons tout pour utiliser NHibernate, mais nous devons maintenir les vues pour les choses héritées. Nous devons donc le créer lorsque la requête est exécutée. –

+0

@Matt Sharpe: Je ne suis pas sûr de comprendre entièrement; pouvez-vous poster un exemple de code expliquant comment fonctionnent vos vues "seulement la mouche" en ce moment? – DanP

Répondre

0

Si vous êtes seulement intéressé par le filtrage des données retournées, vous voudrez peut-être jeter un oeil aux mécanismes de filtrage de Nhibernate; here is a good article décrivant leur utilisation.

+0

Merci pour cela, mais les filtres sont des filtres personnalisés créés par l'utilisateur qui couvrent l'ensemble du modèle de domaine et incluent des choses comme Plan.Owner = {user}. Tout ceci est construit dans une requête de critères d'hibernation mais pour maintenir les autres parties de l'application dont j'ai besoin pour générer cette vue. La vue est utilisée pour que les autres parties de la pile technologique (telles que SSRS & COM) n'aient pas à analyser le filtre enregistré et à exécuter le SQL elles-mêmes. –

2

Extrayez this article pour une explication de mappage d'une classe d'entité à une vue et une table. Je ne suis pas certain que vous serez en mesure de créer dynamiquement vos vues lors de l'exécution, comme vous l'avez spécifié; mais peut-être cela peut-il être fait dans le cadre du processus de génération de schéma en utilisant le mappage d'objet de base de données?

1

Pour créer une vue en utilisant NHibernate directement, jetez un oeil à l'élément de mappage 'objet-de-base de données'.

Ayende a un bon exemple here.

Questions connexes