2012-01-27 18 views
5

Więc jeśli chcę zrobić bezpośrednie zapytanie SQL za pomocą sesję Grails używa przed obsługi wielu źródeł danych mogę zrobić:Pierwsze SessionFactory dla konkretnego Datasource w Grails

def conn = new SQL (SessionFactory. currentSession.connection())

Teraz pytanie jest takie, że mam wiele źródeł danych i chcę pobrać połączenie z konkretnym.

Jak to zrobić?

TIA

Odpowiedz

13

Biorąc pod uwagę źródło danych zdefiniowane w DataSource.groovy jako "dataSource_foo", będziesz mieć SessionFactory nazywa sessionFactory_foo. Więc można zależnościach wstrzyknąć go jak każdy inny wiosennym Fasola:

def sessionFactory_foo 

i używać go tak:

def conn = new Sql(sessionFactory_foo.currentSession.connection()) 
+1

To jest takie proste, że powinienem był wypróbować to ... Dzięki Burt ... Awesome ... – user1085751

+0

@Bert Jesteś tak cennym członkiem społeczności grails, dzięki! –

+0

@ burt-beckwith Czy możesz wskazać, w jaki sposób możemy to osiągnąć w grails 3? Używam wersji 3.2.2, ale nie udało mi się połączyć z wieloma źródłami danych i pracować z nimi –

0

można wiązać na sesję używając odniesienie klasy domeny w następujący sposób:

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

Ta metoda nie wymaga stałego odniesienia do sufiksu źródła danych.

0

lepiej zadeklarować źródło danych w fasoli (Service Controller ...) być wstrzykiwany (nie musi zależeć od Hibernate tutaj)

def dataSource 

i używać go bezpośrednio:

Sql sql = new Sql(dataSource) 

Jeśli masz wiele źródeł danych, po prostu postępuj zgodnie z konwencją nazewnictwa:

def dataSource_foo 
+1

to pożera nadmierne połączenia lepiej używać sessionFactory.currentSession.connection() – davydotcom

Powiązane problemy