2016-01-06 39 views
8

在Grails 2.4.4下,我們有了用作域對象包裝的類。Grails 3 @Delegate表示法,使用域對象

他們是這樣的:

class Foo { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 

} 

這個工作,而是試圖Grails的3.0.11下編譯的時候,我們得到這樣的:

Foo.groovy:14:不能有非抽象類中的抽象方法。必須聲明類「Foo」爲抽象類或者必須實現「org.springframework.validation.Errors org_grails_datastore_gorm_GormValidateable__errors $ get()」方法。 @ 14行,第1列 類Foo { ^

卸下@Delegate註釋會使編譯傳遞,而是調用底層類的方法顯然然後不工作。

有沒有辦法解決這個問題或實現這種相同的行爲,並讓它在Grails 3下通過編譯?

+0

我有同樣的問題。你找到解決方案嗎? – Samoth

+0

你有沒有試過把'@ Validatable'加入你的包裝? – injecteer

+0

在grails 3.x命令中實現接口Validatable而不是@Validatable ... – Samoth

回答

1

好老static hasMany = []或​​不會做這個工作嗎?當然,包裝也是域名類。

0

您可以解決此通過改變包裝類來實現GORM性狀:

class Foo implements GormValidateable, DirtyCheckable, Validateable { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 
} 

我走得更遠,並創建了自己的接口:

class Foo implements GormDelegateHack { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 
} 

interface GormDelegateHack extends GormValidateable, DirtyCheckable, Validateable { 
} 

我申請issue #856針對Grails的數據雖然它可能是Groovy bug