L'attributo privato CreateCriteria di Grails 2.0 non può essere interrogato
-
28-10-2019 - |
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 ...
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