Consulta com join - Exception evaluating property
03/05/2011 00:00
0
Pessoal, boa noite.

Tenho duas classes de domínio: Certificacao e Turma, onde cada turma pertence a uma certificação. Eu alterei a action list do controller da Turma, para listar apenas as turmas onde a certificação pertença a empresa do login do usuário. Ao chamar a url, recebo o seguinte erro:


Exception Message: Exception evaluating property 'descrTurma' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: descrTurma for class: appcertificacoes.Certificacao
Caused by: Error evaluating expression [fieldValue(bean: turmaInstance, field: "descrTurma")] on line [52]: Exception evaluating property 'descrTurma' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: descrTurma for class: appcertificacoes.Certificacao
Class: list.gsp
At Line: [52]


Pelo erro, o Grails está tentando verificar o atributo descrTurma na classe Certificacao ao invés da classe Turma. Pelo que eu verifiquei, a query está correta (habilitei debug do Hibernate). O que pode ser?

Segue minha consulta:


Turma.executeQuery("from Turma t, Certificacao c where t.certificacao.id = c.id and c.empresa.id = ? ", [session.empresa.id], params)


e a query:


select
turma0_.id as id8_0_,
certificac1_.id as id16_1_,
turma0_.version as version8_0_,
turma0_.certificacao_id as certific3_8_0_,
turma0_.data_final as data4_8_0_,
turma0_.data_inicial as data5_8_0_,
turma0_.descr_turma as descr6_8_0_,
turma0_.liberada as liberada8_0_,
turma0_.minimo_alunos as minimo8_8_0_,
turma0_.nota_certicado as nota9_8_0_,
certificac1_.version as version16_1_,
certificac1_.descricao as descricao16_1_,
certificac1_.empresa_id as empresa4_16_1_,
certificac1_.habilitada as habilitada16_1_,
certificac1_.nome as nome16_1_
from
turma turma0_,
certificacao certificac1_
where
turma0_.certificacao_id=certificac1_.id
and certificac1_.empresa_id=? limit ?
Tags: Grails


0
sergiom,
post aqui suas classes pois a mensagem de erro descreve que não existe a propriedade descTurma na classe Certificacao.
03/05/2011 00:00


0
Vamos lá!

Classe de domínio Certificacao:

package appcertificacoes

class Certificacao {

String nome
String descricao
boolean habilitada

static constraints = {
nome( nullable: false, blank: false, maxSize:20 )
descricao(nullable: false, blank: false, maxSize: 300)
}

String toString() {
return nome
}

static hasMany = [turmas:Turma]
static belongsTo = [empresa:Empresa]
}


classe Turma:

package appcertificacoes

import java.text.SimpleDateFormat;

class Turma {

String descrTurma
Date dataInicial
Date dataFinal
double notaCerticado //nota mínima para ser certificado
int minimoAlunos //mínimo de alunos para completar a turma
boolean liberada //turma liberada para os alunos


static constraints = {
descrTurma(nullable: false, blank: false, unique: true, maxSize: 20)
}

static belongsTo = [certificacao:Certificacao]
static hasMany = [provas:Prova, notas:Nota]


String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
sdf.format(dataInicial) + " - " + descrTurma
}
}


O que eu estou tentando fazer é listar apenas as turmas onde a empresa da certificação é igual a empresa do login do usuário. Pelo que eu entendi, está dando problema pois estou retornando dados da certificação. Se eu mudar um pouco a consulta para:

def lista = Turma.executeQuery("select t.id, t.descrTurma, t.dataInicial, t.dataFinal, t.notaCerticado, t.minimoAlunos, t.liberada from Turma t, Certificacao c where t.certificacao.id = c.id and c.empresa.id = ? ", [session.empresa.id], params)


O erro muda para:
Exception Message: Exception evaluating property 'id' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: id for class: java.lang.Long 
Caused by: Error evaluating expression [turmaInstance.id] on line [50]: Exception evaluating property 'id' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: id for class: java.lang.Long
03/05/2011 00:00


0
O método executeQuery não retorna objetos do tipo Turma, no caso mencionado acima?
03/05/2011 00:00


0
Minha consulta ficou assim:

Turma.executeQuery("select t from Turma t, Certificacao c where t.certificacao.id = c.id and c.empresa.id = ? ", [session.empresa.id], params)
03/05/2011 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto