2012-05-10 27 views
2

我有我的Grails應用兩個指定數據源(Grails的2.0.3)...Grails的2 - 如何動態調用多個數據源

dataSource_a { 
    // ... 
} 

dataSource_b { 
    // ... 
} 

我想動態改變什麼數據源的能力我根據某種參數進行訪問。我可以做這樣的事情......

def findPeople(datasource) { 
    if (datasource == 'a') { 
     return Person.a.list() 
    } else if (datasource == 'b') { 
     return Person.b.list() 
    } 
} 

我真的希望能夠做的,雖然是這樣的......

def findPeople(datasource) { 
    return Person."$datasource".list() 
} 

不幸的是,我得到一個當我嘗試做這件事時出錯。 「應用查詢轉換髮生致命錯誤:null 1錯誤」。

有關如何完成此任何想法?或者我只是堅持如果/開關塊?

+1

更新:我發現它的工作原理,如果你不注入一個變量到字符串。所以,Person。「a」.list()的作品。雖然沒有幫助我,但卻很有趣。 – jckeyes

+0

如果你確實想要這個變量出於某種原因,它會使用「$ {datasource}」而不是「$ datasource」。 – GreyBeardedGeek

+0

實際上,您可以在沒有{}的情況下在Groovy中進行簡單的變量注入,但是如果我執行「$ {datasource}」,則會得到相同的結果 – jckeyes

回答

4

我想通了,這是你如何去做。

def findPeople(datasource) { 
    def p = People.class 
    p."${datasource}".list() 
} 

由於某種原因,如果你這樣稱呼它,它就會起作用。

+0

這非常奇怪,但它有效。你有沒有想過如何讓它與ORM對象實例一起工作?像'people。「$ {datasource}」。save()' –

+1

實際上它可以很好的與實例對象對象是不強類型的,即'def a ='vs'People a =' –

+0

我面臨同樣的問題。 「$ {datasource}」。save()它表示應用查詢轉換時發生致命錯誤:null – user9873999