O atributo privado Grails 2.0 CreateCriteria não pode ser consultado
-
28-10-2019 - |
Pergunta
Estou tentando atualizar meu aplicativo para Grails 2.0 e enfrento o seguinte problema.Eu tenho um atributo de domínio privado com getter público.Gostaria de consultar esse atributo em createCriteria e ele me retorna: exceção "Não foi possível resolver a propriedade ..." mesmo se o getter for público.Eu vi um bug Jira http://jira.grails.org/browse/GRAILS-8498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel mas ainda não está funcionando.Grails 1.3.7 funcionou bem.
Meu código é como: Classe de domínio
class MyClass {
protected boolean reserved = false
protected void setReserved(boolean reserved) {
this.reserved = reserved
}
public boolean getReserved() {
return this.reserved
}
}
Consulta
def c = MyClass.createCriteria()
def results = c.list {
eq('reserved', true)
}
Pode ser o problema é que o nome do atributo 'reservado' tornou-se uma palavra-chave reservada no grails porque parece que para outros atributos de nomes diferentes ele funciona ...
Solução
O problema aqui é que, para permitir que as propriedades da classe de domínio sejam persistentes automaticamente sem ter que configurá-las, os campos devem ser propriedades, ou seja, eles devem ter um par getter / setter público do mesmo tipo.
O Groovy faz isso quando você adiciona um campo público - torna o campo privado e cria um getter e um setter públicos.Mas se você já tiver um getter ou setter, ele não fará isso e, se ambos não forem públicos, não serão considerados uma propriedade (no sentido do JavaBean), portanto o campo não é persistente.Portanto, é mais do que isso, o campo não pode ser consultado - nem mesmo está sendo armazenado ou atualizado no banco de dados.
Outras dicas
Depois de alguns minutos de exame, percebi que o problema está no setter protegido.Se eu definir o setter como público, ele funcionará.Parece ser um bug do Grails e, portanto, criei um bug do Grails, consulte: http://jira.grails.org/browse/GRAILS-8637