2016-01-06 9 views
8

Sotto Grails 2.4.4, avevamo classi che usavamo come wrapper per oggetti di dominio.Grails 3 @Negistrazione del delegato, utilizzando un oggetto dominio

Sarebbero simile a questa:

class Foo { 
    @Delegate 
    OurDomainClass ourDomainClass 
    ... 

} 

Questo ha funzionato, ma quando si tenta di compilare in Grails 3.0.11, otteniamo questo:

Foo.groovy: 14: Non può avere un metodo astratto in una classe non astratta. La classe 'Foo' deve essere dichiarata astratta o il metodo 'org.springframework.validation.Errors org_grails_datastore_gorm_GormValidateable__errors $ get()' deve essere implementato. @ linea 14, colonna 1. class Foo { ^

Rimozione l'annotazione @Delegate farà passare la compilazione, ma chiede ai metodi della classe sottostante ovviamente quindi non funzionano.

C'è un modo per ovviare a questo o per ottenere lo stesso comportamento e farlo passare la compilazione sotto Grails 3?

+0

Ho lo stesso problema. Hai trovato una soluzione? – Samoth

+0

hai provato ad aggiungere '@ Validatable' ai tuoi wrapper? – injecteer

+0

In grails 3.x comandi implementa l'interfaccia Validatable invece @Validatable ... – Samoth

risposta

1

Il buon vecchio static hasMany = [] o static hasOne = [] non esegue il lavoro? Ovviamente anche i wrapper sarebbero classi di dominio.

0

È possibile aggirare questo cambiando la classe wrapper per implementare i tratti Gorm:

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

sono andato oltre e creato il mio interfaccia:

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

interface GormDelegateHack extends GormValidateable, DirtyCheckable, Validateable { 
} 

ho presentato issue #856 contro graal-dati -mapping, sebbene possa essere un Groovy bug.

Problemi correlati