Andrew
Andrew

Reputation: 2363

In Grails how do I access the hibernate session inside of a domain class static method?

I've read various articles on the web, but they seem rather scattered on this point. Exactly what do I need to do in my configuration and in my method to get the hibernate session. I'm trying to make some direct sql calls for stored procedures. I have a large code base that I am porting from Ruby with lots of static methods and stored procedure calls. If I need to use the sessionFactory, then how to I get access to it?

Upvotes: 10

Views: 19939

Answers (3)

Michal Zmuda
Michal Zmuda

Reputation: 5621

You can use withSession

Book.withSession { session ->
    session.clear()
}

More info

Upvotes: 15

Burt Beckwith
Burt Beckwith

Reputation: 75671

From a static method you can pull the sessionFactory bean from the application context:

import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
...
def ctx = AH.application.mainContext
def sessionFactory = ctx.sessionFactory
def session = sessionFactory.currentSession

Upvotes: 28

Jean Barmash
Jean Barmash

Reputation: 4788

If it's in a service or controller, you just need to declare sessionFactory

def sessionFactory

to have it injected. After that you can refer to

sessionFactory.currentSession

to use it.

Check out hibernate-filter plugin (file HibernateFilterGrailsPlugin.groovy) for how to inject a bunch of methods that use the session.

Upvotes: 24

Related Questions