2012-01-27 9 views
5

Vì vậy, nếu tôi muốn làm một truy vấn SQL trực tiếp bằng cách sử dụng phiên Grails đang sử dụng trước khi hỗ trợ nhiều datasources tôi có thể làm:Bắt SessionFactory cho một Datasource đặc biệt trong Grails

def Conn = new Sql (sessionfactory. currentSession.connection())

Bây giờ câu hỏi đặt ra là tôi có nhiều nguồn dữ liệu và muốn lấy một kết nối đến một nguồn cụ thể.

Tôi làm như thế nào?

TIA

Trả lời

13

Cho một nguồn dữ liệu quy định tại DataSource.groovy là "dataSource_foo", bạn sẽ có một SessionFactory gọi sessionFactory_foo. Vì vậy, bạn có thể sự phụ thuộc tiêm nó giống như bất kỳ Spring bean khác:

def sessionFactory_foo 

và sử dụng nó như thế này:

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

Đó là điều đơn giản mà tôi nên thử nó ... Cảm ơn Burt ... Tuyệt vời ... – user1085751

+0

@Bert Bạn là một thành viên có giá trị cho cộng đồng grails, Cảm ơn! –

+0

@ burt-beckwith Bạn có thể hướng dẫn cách chúng ta có thể đạt được điều này trong grails 3 không? Tôi đang sử dụng phiên bản 3.2.2 nhưng không nhận được thành công để kết nối với nhiều nguồn dữ liệu và làm việc với chúng –

0

Bạn có thể liên kết với phiên sử dụng một tài liệu tham khảo lớp miền như sau:

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

Phương pháp này không yêu cầu tham chiếu mã cứng vào hậu tố nguồn dữ liệu.

0

Better khai báo nguồn dữ liệu trong đậu của bạn (dịch vụ, điều khiển ...) để được tiêm (không cần phải phụ thuộc từ Hibernate đây)

def dataSource 

và sử dụng nó trực tiếp:

Sql sql = new Sql(dataSource) 

Nếu bạn có nhiều nguồn dữ liệu, chỉ cần thực hiện theo quy ước đặt tên

def dataSource_foo 
+1

điều này khiến các kết nối vượt quá tốt hơn để sử dụng sessionFactory.currentSession.connection() – davydotcom