Uso de Inner Join em Criteria
05/04/2013 19:57
0
Boa noite pessoal, sou novo em Grails e estou tentando fazer inner join em algumas tabelas.
Vou postar meu codigo sem inner join em apenas uma tabela que estaria funcionando perfeitamente:

MensagemGrupo.createCriteria().list {
or {
and {
le("dataInicioVigencia", hoje)
ge("dataFinalVigencia", hoje)
}
isNull("dataFinalVigencia")
}
if (!grupos.isEmpty()) {
'in'("fornecedorGrupo", grupos)
}
if (!fornecedores.isEmpty()) {
'in'("fornecedor", fornecedores)
}
}


até ai tudo certo, mas preciso relacionar esta tabela da seguinte maneira:
MensagemGrupo --> MensagemPerfil --> Perfil.

Alguma idéia de como poderia fazer isso com criteria?
Tags: Inner Join em Criteria


0
Boa tarde!

Você quer filtrar um campo que está no perfil ou apenas buscar os dados de MensagemGrupo, MensagemPerfil e Perfil de uma vez?

Assumindo que o necessário é filtrar as mensagens pelo perfil

def perfil = Perfil.get(1)
def mensagens = MensagemGrupo.createCriteria().list() {
...
mensagemPerfil {
eq('perfil', perfil)
}
}

Ou pode ser também um campo do Perfil:

def mensagens = MensagemGrupo.createCriteria().list() {
...
mensagemPerfil {
perfil {
eq('campo', 'valor')
}
}
}

05/04/2013 20:43


0
Sergiom, bom dia!
vou tentar explicar um pouco mais detalhado para ver se consigo passar o que estou tentando fazer.

Bem eu tenho uma tabela MensagemGrupo
Depois tenho outra tabela chamada Perfil,
e por ultimo tenho a tabela MensagemPerfil.
Esta ultima tens uma referencia para as duas outras, o que eu preciso é em primeiro momento coletar todos os perfis do usuário logado que estou fazendo da seguinte maneira:
List<Perfil> perfilUsuario = PerfilUsuario.findAllByUsuario(usuarioAtual).collect { it.usuario }


Com isso eu preciso buscar todas os registros da tabela MensagemGrupo que possuem
os mesmos ids na tabela MensagemPerfil e que o ids da lista de perfis sejam os mesmos da tabela MensagemPerfil.
06/04/2013 13:14


0

List<Perfil> perfilUsuario = PerfilUsuario.findAllByUsuario(usuarioAtual).perfil


Não testei, mas tente isto pra ver se resolve.
09/04/2013 19:40


0
Pedro Henrique, boa noite, o que eu precisava era fazer era uma subquery dentro da minha
MensagemGrupo.createCriteria().list {
}
mas não encontrei uma forma para fazer isso com criteria então optei por utilizar HQL para resolver esta questão.

Agradeço a colaboração de todos.
09/04/2013 23:38


0
Boa tarde Flávio, como vai?

Olhando rapidamente na documentação do Grails encontrei este exemplo de join. Acredito que possa resolver seu problema.


def criteria = Task.createCriteria()
def tasks = criteria.list{
eq "assignee.id", task.assignee.id
join 'assignee'
join 'project'
order 'priority', 'asc'
}


Abs. Nos diga se deu certo.



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