2011-02-16 18 views
3

通常我使用一個一對多的關係通過這種方式:的Grails GORM多形式

class Study { 
    static hasMany = [ crfs : Crf ] 
    String name 
    ... 
} 

class Crf { 
String title 
String info 
... 
} 

我可以擴展這種關係給別人域,例如:

static hasMany = [ crfs : Crf, crfb : CrfBlood ...] 

但在我的情況下,我必須將研究域連接到其他30個域,也許更多...(例如:CrfBlood,CrfMedical,crfFamily等)。

我應該在我的情況下使用哪種域模型實現?
我想在我的項目中保持動態查找器的可用性。

更新 - 模型補充:

一個研究可以有一個一對多主題
A 研究可以有一對多Crfs(例如:CrfBlood,CrfMedical,crfFamily等等)。
A 對象可以有一對多訪問(例如:一個主題可以有幾個血液測試)。

我想動態分配Crfs給一個研究,那麼如何在我的域中不使用靜態hasMany = [...]的情況下使用GORM(動態查找器)?
也許,我可以實現一項服務來完成hasMany所做的相同工作?

+1

什麼是具有`hasMany` 30個域類的問題?是所有的關係1:M(也許`血'是1:1的關係)? – 2011-02-17 10:06:34

+0

我可以有一對一的關係。通常它會是1:M。 – 2011-02-17 16:50:42

回答

0

您可以將所有Crf類型聲明爲Crf的子類,以便與Study只有一個關係,但仍可以添加不同的類型。

class Crf { 
    String title 
    String info 
} 

class CrfBlood extends Crf { 
    String detailBlood 
} 

class CrfMedical extends Crf { 
    String detailMedical 
} 

class Study { 
    String name 
    static hasMany = [ crfs: Crf ] 
} 

然後,你可以這樣做:

def s = new Study(...) 
def c1 = new CrfBlood(...) 
def c2 = new CrfMedical(...) 
s.addToCrfs(c1) 
s.addToCrfs(c2)