Domanda

Sto cercando di aggiornare la mia app a Grails 2.0 e devo affrontare il seguente problema.Ho un attributo di dominio privato con getter pubblico.Vorrei interrogare questo attributo in createCriteria e mi restituisce: "Impossibile risolvere la proprietà ..." eccezione anche se il getter è pubblico.Ho visto un bug di Jira http://jira.grails.org/browse/GRAILS-8498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ma ancora non funziona.Grails 1.3.7 ha funzionato bene.

Il mio codice è come: Classe di dominio

class MyClass {
   protected boolean reserved = false

   protected void setReserved(boolean reserved) {
        this.reserved = reserved
    }

   public boolean getReserved() {
        return this.reserved
    }
}

Query

def c = MyClass.createCriteria()
def results = c.list {
   eq('reserved', true)
}

Il problema potrebbe essere che il nome dell'attributo "riservato" è diventato una parola chiave riservata in grails perché sembra che per altri attributi con nomi diversi funzioni ...

È stato utile?

Soluzione

Il problema qui è che per consentire alle proprietà della classe di dominio di essere automaticamente persistenti senza doverle configurare, i campi devono essere proprietà, ovvero devono avere una coppia getter / setter pubblica dello stesso tipo.

Groovy fa questo per te quando aggiungi un campo pubblico: rende il campo privato e crea un getter e setter pubblico.Ma se hai già un getter o un setter, non lo fa, e se non sono entrambi pubblici, non sono considerati una proprietà (nel senso JavaBean), quindi il campo non è persistente.Quindi è molto di più che il campo non è interrogabile: non viene nemmeno memorizzato o aggiornato nel database.

Altri suggerimenti

Dopo alcuni minuti di esame, mi sono reso conto che il problema è nel setter protetto.Se imposto il setter su pubblico, funziona.Sembra essere un bug di Grails, e quindi ho sollevato un bug di Grails, vedi: http://jira.grails.org/browse/GRAILS-8637

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top