Получение SessionFactory для определенного источника данных в Grails - PullRequest
5 голосов
/ 27 января 2012

Поэтому, если я хочу выполнить прямой SQL-запрос, используя сеанс, который использует Grails до поддержки нескольких источников данных, я мог бы сделать:

def conn = new Sql (sessionFactory.currentSession.connection ())

Теперь вопрос в том, что у меня есть несколько источников данных, и я хочу получить соединение с конкретным.

Как мне это сделать?

ТИА

Ответы [ 3 ]

14 голосов
/ 27 января 2012

Учитывая источник данных, определенный в DataSource.groovy как "dataSource_foo", у вас будет SessionFactory с именем sessionFactory_foo. Таким образом, вы можете внедрить его как любой другой Spring bean-компонент:

def sessionFactory_foo

и используйте его так:

def conn = new Sql(sessionFactory_foo.currentSession.connection())
1 голос
/ 27 января 2012

Вы можете привязать к сеансу, используя ссылку на класс Домена следующим образом:

Book.withSession { session -> 
    def conn = new Sql(session.connection())
    ...
}

Этот метод не требует жестко закодированной ссылки на суффикс источника данных.

0 голосов
/ 23 июля 2014

Лучше объявить источник данных в вашем bean-компоненте (Service, Controller ...) для внедрения (здесь не нужно зависеть от Hibernate)

def dataSource

и использовать его напрямую:

Sql sql = new Sql(dataSource)

Если у вас несколько источников данных, просто следуйте соглашению об именах

def dataSource_foo
...