Quantidade de Registros
18/02/2013 00:08
0
Olá,

Estou iniciando em Grails e estou com dificuldade em saber a quantidade de registros (tarefas) que tenho em uma query ou set dentro de um relacionamento.
O problema é que tenho a domain class Projeto:

class Projeto {

static belongsTo = [empresa: Empresa]
static hasMany = [fases: Fase, implementacoes: Implementacao]
...

}


Dentro da classe Projeto, tenho então o relacionamento com fase, ou seja, um Projeto pode ter várias Fases. A domain class Fase está da seguinte forma:

class Fase {

static belongsTo = [projeto: Projeto]
static hasMany = [etapas: Etapa]
...
}


Como podem ver, as fases de um projeto apresentam Etapas. Veja a classe Etapa:

class Etapa {

static belongsTo = [fase: Fase]
static hasMany = [tarefas: Tarefa]
...
}


E para finalizar cada etapa tem suas tarefas:

class Tarefa {

static belongsTo = [etapa: Etapa, implementacao: Implementacao]
static hasMany = [trabalhos: Trabalho]
...
}


Bom! Independente se meus diagramas estão corretos ou não, se existe jeito mais simples para montar ou não, o que estou querendo entender é como retorno a quantidade de tarefas existentes dentro de um projeto. Estou mostrando o projeto (show) e queria saber a quantidade de tarefas. Já tentei montar query, apenas retornar um size(), mas nada funcionou. Alguém pode me ajudar?
Tags: set


0
Fala brother vc pode usar o projections.

Ex:

int numTarefas = Projeto.withCriteria(uniqueResult: true) {
projetions {
fase {
etapa {
count('tarefa')
}
}
}
}




1
Massa essa parada de Projections.

São closures?

Seriam 4 .class gerados na compilação?
18/02/2013 13:25


0
Oi Adriano, exatamente.
Cada conjunto de chaves vai gerar uma subclasse.


0
Perfeito esse recurso de Projections... Está a partir de qual versão?
18/02/2013 14:44


0
Olá,

Obrigado pela resposta.
Estou testando, mas a principio ainda tenho um probleminha.
Estarei estudando com mais calma posteriormente para ver se resolvo. O problema é que no exemplo assima ele está contando as etapas e não as tarefas.

               numero = Projeto.withCriteria(uniqueResult: true) {
projections {
fases {
etapas {
count('tarefas')
}
}
}
}
19/02/2013 02:41


0
Brother seguinte!

No exemplo que dei ele conta a Tarefa pertecente á Etapa que pertence á Fase que por sua vez pertence ao Projeto. A não ser que tenha entendido sua dúvida errado! Sou mestre nisso! :D

Lembrando que o nome das classes é no singular, é como o Henrique citou a cima, o cojunto de chaves gera uma subclasse.

Abraços!


0
Consegui fazer funcionar.
Acho que entendi a lógica do Projections.
O método ficou assim:


def p = Projeto.createCriteria()
int num = p.get {
eq 'id', this.id
projections {
fases {
etapas {
tarefas {
count('nome')
}
}
}
}
}


Olhei a documentação oficial para ver como funcionava. Se alguém tiver material e quiser colocar o link, eu agradeço.
Site: http://grails.org/doc/latest/guide/GORM.html#criteria
Procurei por: Querying with Projections
25/02/2013 01:43



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