2009-12-13 95 views
2

你能看到這樣的代碼嗎?可以在同一個方法中使用sql.newInstance和Domain類調用嗎?

def methodname() 
{ 
proc = "sql to call a stored proc" 
def conn = Sql.newInstance(DB_CONN, DB_USERNAME, DB_PASSWORD, "org.postgresql.Driver") 
def result1 = conn.rows(proc) 
def result2 = MyClass.Find("from MyClass where foo='bar'") 
return [result1, result2] 
} 

如果有,它們採用不同的連接?有沒有辦法讓存儲過程調用與MyClass調用相同的連接?

回答

3

他們將使用不同的連接。 Sql將獲取一個新的GORM調用將使用來自DataSource管理的連接池中的一個。但你可以得到的Sql使用sessionFactory.currentSession.connection()使用相同的連接GORM電話:

class MyControllerOrMyService { 

    def sessionFactory 

    def methodname() { 
     proc = "sql to call a stored proc" 
     def conn = new Sql(sessionFactory.currentSession.connection()) 
     def result1 = conn.rows(proc) 
     def result2 = MyClass.Find("from MyClass where foo='bar'") 
     return [result1, result2] 
    } 
} 
+0

謝謝我給一個嘗試。 – Andrew 2009-12-13 14:48:14

2

他們將是不同的連接。這是Grails的一個標準問題,您只能有一個DataSource.groovy,因此只有一個鏈接到GORM。有辦法解決這個問題,但這主要是您當時需要的。

如果你想連接到一個完全不同的數據源,你可以在Config.groovy中設置類似的東西(不完美但有效)。

environments { 
    production { 
     grails.serverURL = "http://localhost:8080/${appName}" 
     grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver" 
     grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>" 
     grails.databaseUsername = "<username>" 
     grails.databasePassword = "<password>" 
    } 
    development { 
     grails.serverURL = "http://localhost:8080/${appName}" 
     grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver" 
     grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>" 
     grails.databaseUsername = "<username>" 
     grails.databasePassword = "<password>" 
    } 
    test { 
     grails.serverURL = "http://localhost:8080/${appName}" 
     grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver" 
     grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>" 
     grails.databaseUsername = "<username>" 
     grails.databasePassword = "<password>" 
    } 
} 

然後在你的服務只需調用它像這樣:

import org.codehaus.groovy.grails.commons.* 


class SomeService { 

    boolean transactional = true 
    def config = ConfigurationHolder.config 

    // set up the Sql object 
    def sql = groovy.sql.Sql.newInstance(
      config.grails.databaseURL, 
      config.grails.databaseUsername, 
      config.grails.databasePassword, 
      config.grails.databaseDriverClassName) 
相關問題