He leído varios artículos en la web, pero parecen bastante dispersos en este punto. Exactamente qué debo hacer en mi configuración y en mi método para obtener la sesión de hibernación. Estoy tratando de hacer algunas llamadas sql directas para procedimientos almacenados. Tengo una gran base de código que transfiero desde Ruby con muchos métodos estáticos y llamadas a procedimientos almacenados. Si necesito usar sessionFactory, ¿cómo puedo acceder a él?En Grails, ¿cómo accedo a la sesión de hibernación dentro de un método estático de clase de dominio?
En Grails, ¿cómo accedo a la sesión de hibernación dentro de un método estático de clase de dominio?
Respuesta
Desde un método estático se puede tirar el grano sessionFactory del contexto de aplicación:
import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
...
def ctx = AH.application.mainContext
def sessionFactory = ctx.sessionFactory
def session = sessionFactory.currentSession
Si está en un servicio o controlador, sólo tiene que declarar sessionFactory
def sessionFactory
tener que inyectarse. Después de eso, puede consultar
sessionFactory.currentSession
para usarlo.
Consulte el plugin hibernate-filter (archivo HibernateFilterGrailsPlugin.groovy) para saber cómo inyectar un montón de métodos que usan la sesión.
estoy buscando específicamente la forma de obtenerlo de un método estático de clase de dominio. No quiero tener que obtener la sesión del controlador y pasarla a los métodos. Eso es tan 1990s ' – Andrew
Intenté esto con Grails 2.1 y la fábrica de la sesión no parece ser inyectada en el servicio. El método de Burt anterior parece funcionar todavía. –
He probado esto ahora en 2.2.3 y funciona correctamente. –
Esto no parece darte la sesión completa de Hibernate, sino que es una sesión de Grails. que le faltan algunos métodos ('createSQLQuery' por ejemplo) –
Esto no parece ser un comentario lleno de verdad. La sesión no es una sesión de "Grails", es una sesión de Hibernate. Es bastante fácil de determinar; reemplace 'session.clear()' con 'println session.getClass(). name' y es muy probable que vea' org.hibernate.internal.SessionImpl' en la salida –
- 1. ¿Cómo se burla de un método estático de un objeto de dominio en Grails?
- 2. llamar a un método estático dentro de una clase?
- 3. mejor manera de acceder a la propiedad de clase dentro de un método estático con PHP
- 4. Campo de tiempo En la clase de dominio de grails
- 5. ¿Cómo puedo llamar a las variables miembro de una clase dentro de un método estático?
- 6. C#: ¿Cómo puedo llamar a un método estático de una clase base desde un método estático de una clase derivada?
- 7. ¿Cómo puedo obtener el valor de una variable de sesión dentro de un método estático?
- 8. Llamar a un método de clase dentro de una clase
- 9. Grails: dinámicamente inyectan servicio en la clase de dominio
- 10. ¿Cómo se modifica una clase de dominio en Grails?
- 11. ¿Cómo accedo a un archivo Silverlight XAP en un dominio?
- 12. clase derivada Llamando al método estático de la clase base en su propio método estático
- 13. ¿Cómo accedo al contenido corporal de un POST en Grails?
- 14. Como llamar a un método estático de otra clase
- 15. Agregar un método a una clase de dominio
- 16. ¿Cómo accedo a un archivo de configuración dentro del contenedor?
- 17. AsyncTask dentro de un método estático - ¿Buena práctica de codificación?
- 18. Método estático de una clase estática frente a un método estático de una clase no estática (C#)
- 19. Llamando al método estático de la clase B (que se extiende a la clase A) de la clase A
- 20. Python: ¿Cómo accedo a la instancia de una clase decorada desde dentro de un decorador de clase?
- 21. No se puede usar grails g.link en la clase de dominio
- 22. ¿Accediendo a un miembro privado de un parámetro dentro de un método estático?
- 23. ¿Llamar a una función dentro de un método de clase?
- 24. ¿Cómo accedo a las cookies dentro de Flash?
- 25. En Grails, ¿cómo declaro un nombre de esquema de SQL Server para una clase de dominio?
- 26. Intercambio de variables dentro del método estático
- 27. Redefiniendo método estático en la clase hija
- 28. Crear método estático a partir de un método existente fuera de la clase? (error de "método sin encuadernar")
- 29. ¿Cómo obtengo el tipo (clase) de una propiedad de un objeto de dominio Grails?
- 30. Cómo acceder a un método estático a través de una referencia de clase
Gracias Burt. Voy a intentar esto. – Andrew
ApplicationHolder ahora está en desuso, ¿hay una metodología de actualización para esto? –
'import grails.util.Holders' importará el titular estático no obsoleto y luego' Holders.grailsApplication.mainContext.sessionFactory' le dará un control sobre sessionFactory. – pendext