2016-01-06 25 views
8

Grails 2.4.4 altında, etki alanı nesneleri için sarmalayıcı olarak kullandığımız sınıflarımız vardı.Grails 3 @Delegate notasyonu, bir etki alanı nesnesi kullanarak

Onlar şu şekilde görünecektir: Bu çalıştı, ama Grails 3.0.11 altında derlemeye çalışırken, biz bu olsun

class Foo { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 

} 

:

Foo.groovy: 14: Bir olamaz soyut olmayan bir sınıfta soyut yöntem. 'Foo' sınıfı özet olarak belirtilmelidir ya da 'org.springframework.validation.Errors org_grails_datastore_gorm_GormValidateable__errors $ get()' yöntemi uygulanmalıdır. satır 14 @ , sütun 1 class Foo { ^

derleme geçiş yapacak @Delegate ek açıklama çıkarma

, fakat bunun altında uzanan sınıfın metodlarıyla mümkün olacağı çağrıları açıkça daha sonra çalışmaz.

Bu konuda çalışmanın ya da aynı davranışı elde etmenin ve Grails 3 altında derleme yapmanın bir yolu var mı?

+0

Aynı sorunu yaşıyorum. Çözüm buldunuz mu? – Samoth

+0

Paketleyicilere '@ Validatable' eklemeye çalıştınız mı? – injecteer

+0

Gravürlerde 3.x komutları arabirimi uygular. Geçerli değil @Validatable ... – Samoth

cevap

1

Eski iyi static hasMany = [] veya static hasOne = [] işi yapmaz mı? Elbette sarmalayıcılar da alan sınıfları olacaktı.

0

Sen Gorm özelliklerini uygulamak için sarmalayıcı sınıf değiştirerek bu çalışabilirsiniz:

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

Ben daha da ileri giderek ve kendi arayüzünü oluşturuldu:

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

interface GormDelegateHack extends GormValidateable, DirtyCheckable, Validateable { 
} 

ben karşı issue #856 dosyalanan grails-verileri -mapping, bir Groovy bug olabilir.