Ho letto vari articoli sul web, ma sembrano piuttosto sparsi su questo punto. Esattamente ciò che devo fare nella mia configurazione e nel mio metodo per ottenere la sessione di sospensione. Sto provando a fare alcune chiamate sql dirette per le stored procedure. Ho una grande base di codice che sto eseguendo il porting da Ruby con molti metodi statici e chiamate di stored procedure. Se ho bisogno di usare sessionFactory, allora come posso accedervi?In Grails come si accede alla sessione di sospensione all'interno di un metodo statico di classe dominio?
risposta
Da un metodo statico si può tirare il fagiolo sessionFactory dal contesto di applicazione:
import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
...
def ctx = AH.application.mainContext
def sessionFactory = ctx.sessionFactory
def session = sessionFactory.currentSession
Se è in un servizio o un controller, è sufficiente dichiarare sessionFactory
def sessionFactory
di averlo iniettato. Dopo di che è possibile fare riferimento a
sessionFactory.currentSession
per usarlo.
Controllare il plug-in filtro di ibernazione (file HibernateFilterGrailsPlugin.groovy) per come iniettare una serie di metodi che utilizzano la sessione.
sto specificamente alla ricerca come prendilo da un metodo statico di classe dominio. Non voglio dover ottenere la sessione dal controller e trasferirla nei metodi. È lo – Andrew
degli anni '90 che ho provato con Grails 2.1 e il factory di sessione non sembra essere stato iniettato nel servizio. Il metodo di Burt sopra sembra funzionare ancora. –
Ho provato questo ora su 2.2.3 e funziona correttamente. –
Questo non sembra darti la piena sessione di Hibernate, invece è una sessione di Grails, a cui mancano alcuni metodi ('createSQLQuery 'ad esempio) –
Questo non sembra essere un commento pieno di verità. La sessione non è una sessione "Grails", è una sessione di Hibernate. È abbastanza facile da determinare; sostituisci 'session.clear()' con 'println session.getClass(). name' e molto probabilmente vedrai' org.hibernate.internal.SessionImpl' nell'output –
- 1. Grails sospensione sessione in batch
- 2. Come si accede alla variabile dichiarata in un'estensione di classe?
- 3. C#: come si chiama un metodo statico di una classe base da un metodo statico di una classe derivata?
- 4. C#: come si accede al membro statico di una classe, data un'istanza di quella classe?
- 5. Impossibile utilizzare grails g.link nella classe dominio
- 6. Come utilizzare Enum in Grails (non nella classe di dominio)
- 7. Si tratta di un bug? MissingMethodException accede a un metodo statico privato con 0 come parametro
- 8. molteplici relazioni hasMany per stessa classe di dominio in Grails
- 9. Come si espone un modello di dominio Grails usando OData?
- 10. Collegamento a Grails Oggetto di dominio save()
- 11. Come associare una sessione di sospensione a un thread in Grails?
- 12. Classe interna che accede alla classe esterna
- 13. In C# .net, come si accede a un controllo da un metodo statico?
- 14. Come interrompere una sessione di sospensione?
- 15. Grails vincoli di dominio di definizione
- 16. Metodo statico di una classe statica rispetto al metodo statico di una classe non statica (C#)
- 17. Come si crea una variabile temporanea in una classe di dominio Grails?
- 18. Mappatura del risultato di una query SQL nativa alla classe di dominio Grails
- 19. Apri e chiudi Sessione di sospensione
- 20. Come posso ottenere il tipo (classe) di una proprietà di un oggetto di dominio Grails?
- 21. statico vs classe come variabile di classe/metodo (Swift)
- 22. Come accedere alla configurazione di Grails in Grails 2.0?
- 23. Creare un'istanza di classe dal metodo statico
- 24. Qual è la differenza tra un metodo struct statico e un metodo di classe statico?
- 25. Utilizzo del servizio Grails nella classe di dominio
- 26. Utilizzo della sessione di sospensione con quarzo
- 27. Java: come si accede a due livelli di un metodo della classe genitore?
- 28. chiama un metodo statico all'interno di una classe?
- 29. Come posso ottenere il valore di una variabile di sessione all'interno di un metodo statico?
- 30. Rimozione di controller e classi di dominio in grails
Grazie Burt. Farò un tentativo. – Andrew
ApplicationHolder è ora obsoleto, esiste una metodologia di aggiornamento per questo? –
'import grails.util.Holders' importa il Detentore statico non deprecato e quindi 'Holders.grailsApplication.mainContext.sessionFactory' ti darà un handle su sessionFactory. – pendext