2016-01-06 60 views
8

W Grails 2.4.4 mieliśmy klasy używane jako obwoluty dla obiektów domeny.Grails 3 @Rozkład notacji, używając obiektu domeny

Będą wyglądać tak:

class Foo { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 

} 

To działało, ale gdy próbuje skompilować pod Grails 3.0.11, otrzymujemy w ten sposób:

Foo.groovy: 14: Nie mogę mieć metoda abstrakcyjna w klasie nie abstrakcyjnej. Klasa "Foo" musi zostać uznana za abstrakcyjną lub musi zostać zaimplementowana metoda "org.springframework.validation.Errors org_grails_datastore_gorm_GormValidateable__errors $ get()". @ linii 14, kolumna 1. class Foo { ^

Zdejmowanie @Delegate adnotacji uczynią kompilacji przepustkę, ale zwraca się do metod klasy bazowej oczywiście wtedy nie działają.

Czy istnieje sposób obejścia tego problemu lub osiągnięcia tego samego zachowania i przekazania go w ramach gry Grails 3?

+0

Mam ten sam problem. Czy znalazłeś rozwiązanie? – Samoth

+0

Czy próbowałeś dodać '@ Validatable' do swoich wrapperów? – injecteer

+0

W grach 3.x polecenia implementują interfejs Validatable zamiast @Validatable ... – Samoth

Odpowiedz

1

Czy stary dobry static hasMany = [] lub static hasOne = [] nie spełnia swojej roli? Oczywiście opakowania również byłyby klasami domen.

0

Można obejść ten problem poprzez zmianę klasy otoki do wdrożenia cech Gorm:

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

poszedłem dalej i stworzył własną interfejs:

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

interface GormDelegateHack extends GormValidateable, DirtyCheckable, Validateable { 
} 

złożyłem issue #856 przed Grails-dane -mapping, chociaż może to być Groovy bug.