Dans Graal comment puis-je accéder à la session hibernate à l'intérieur d'un domaine méthode statique de la classe?
J'ai lu différents articles sur le web, mais ils semblent plutôt dispersée sur ce point. Exactement ce que dois-je faire dans ma configuration, et dans ma méthode pour obtenir de la session hibernate. Je suis en train de faire quelques sql directe des appels de procédures stockées. J'ai une grande base de code que je suis le portage de Ruby avec beaucoup de méthodes statiques et les appels de procédure stockée. Si j'ai besoin d'utiliser la sessionFactory, alors comment puis-je y avoir accès?
OriginalL'auteur Andrew | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
Partir d'une méthode statique que vous pouvez tirer de la sessionFactory de la fève de contexte de l'application:
ApplicationHolder est maintenant obsolète, est-il une mise à jour de la méthodologie pour cela?
import grails.util.Holders
à importer les non dépréciées statique Titulaire et puisHolders.grailsApplication.mainContext.sessionFactory
vous donnera une poignée sur la sessionFactory.Éviter
Holders
. Juste parce que c'est pas obsolète ne signifie pas que vous devez l'utiliser. En fait, il a exactement sur le même problèmes queApplicationHolder
et les autres, et doivent également être obsolète et enlevé. Si vous êtes à la recherche pour l'actuelle session Hibernate,withSession
est la meilleure option (voir la réponse de @michal-zmuda)OriginalL'auteur Burt Beckwith
Si c'est dans un service ou d'un contrôleur, vous devez simplement déclarer sessionFactory
de l'avoir injecté. Après cela, vous pouvez consulter
de l'utiliser.
Découvrez hibernate-filtre plugin (fichier HibernateFilterGrailsPlugin.groovy) pour savoir comment injecter un tas de méthodes qui utilisent la session.
J'ai essayé cela avec Graal 2.1 et la session de l'usine ne semble pas être injecté dans le service. Burt méthode ci-dessus semble encore fonctionner.
J'ai maintenant testé sur 2.2.3 et qu'il fonctionne correctement.
J'ai essayé avec graal 2.4.4 et ce n'est pas injecté.
Fonctionne parfaitement dans Graal 3.2.2.
OriginalL'auteur Jean Barmash
Vous pouvez utiliser withSession
Plus d'infos
createSQLQuery
par exemple)Ce ne semble pas être un commentaire plein de vérité. La session n'est pas un "Graal" de la session, c'est une session Hibernate. Il est assez facile à déterminer; remplacer
session.clear()
avecprintln session.getClass().name
et vous êtes très probable de voirorg.hibernate.internal.SessionImpl
dans la sortieOriginalL'auteur Michal Z m u d a