Selecionando registro através do MAP
05/11/2012 11:08
0
Tenho uma dúvida sobre como localizar registros dentro de maps.

Em duas classes Sala e Aluno:


class Sala{
...
static hasMany = [alunos: Aluno]
...
}

class Aluno{
...
String matricula
static belongsTo = [sala: Sala]
...
}




Como a classe sala possui vário alunos, as vezes eu preciso localizar a sala mas pelo registro do aluno.

Eu tentei:

def aluno = Aluno.findByMatricula("123")

def teste = Sala.findByAlunos(aluno)



Porém dá erro em 'teste' informando que o parametro não foi preenchido.

Gostaria de saber a melhor maneira de localizar a sala usando o registro de aluno.
Tags: finder, busca


1
Brother não sei se entendi bem sua dúvida, mas eu usaria criteria neste caso!

Ex:

List<Sala> salas = Sala.withCriteria {
aluno {
eq("matricula", 1)
}
}


Aqui retorno todas as salas em qual o aluno com "matricula = 1" está!

Se quiser apenas um resultado basta alterar para:

Sala sala = Sala.withCriteria(uniqueResult: true) {
aluno {
eq("matricula", 1)
}
}




Abraço!


0
Gabriel,

Eu usei um exemplo errado. O código acima é só um exemplo, mas o registro de Aluno não possui o

belongsTo = [sala: Sala]


O que dificulta a localização do registro de sala através de alunos.

a minha dúvida é como localizar o registro sala através de um registro aluno (sendo que Aluno não possui o belongsTo).

Sala possui um MAP chamado alunos (hasMany) e eu queria saber como localizar o regitro sala através do registro aluno.

Digamos que eu tenha qualquer aluno, como eu implemento o código (finder/criteria/query) de modo que eu, de posse do registro de 'aluno', bucando dentro do MAP de 'alunos' de cada sala, consiga encontrar qual sala o aluno está.

É o caminho inverso, em sala eu consigo ver qual aluno está nela porém eu queria saber como localizar a sala de posse do registro de aluno.

Penso que terei que iterar cada elemento do MAP, mas não sei como fazer isso e não sei se ela é a melhor opção.
05/11/2012 12:16


1
Ovidio, como uma sala não possui muitos alunos acho que não tem problema se der um find na lista tipo:


def sala = Sala.get(1)
def aluno = sala.alunos.find = { it.matricula = 123 }


Não testei o código mas se não me falha a memória, já fiz algo assim.
05/11/2012 13:08


0
Pedro,

funcionou, era isso que eu estava procurando. Muito obrigado pela sua ajuda.

Apenas uma observação é que após o find não possui o sinal de '=', ficando assim:

def aluno = sala.alunos.find { it.matricula == "123" }



Gabriel,

muito obrigado pela ajuda também.


05/11/2012 14:24


0
Ops, foi mal rs, foi a correria, não revisei, por conta da pressa, grande abraço, fico feliz em poder ajudar.

T+
05/11/2012 14:50



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