Garantir integridade entre as entidades
29/02/2012 15:48
1
Olá, amigos!

Tenho a seguinte dúvida: Suponhamos que tenho as entidades: Empresa, Cargo e Usuario, como abaixo:


class Empresa{
String nome
}


class Usuario{
String nome
Cargo cargo
static belongsTo = [empresa: Empresa]
}


class Cargo{
String nome
static belongsTo = [empresa:Empresa]
}


Ao cadastrar um novo usuário, preciso selecionar a empresa que ele pertence e qual o seu cargo. A lista de cargos eu resolvo com javascript, a partir da empresa selecionada. Até aí, tudo bem. Mas supondo que o cliente esteja com o javascript desligado no browser ou ainda que eu deseje implementar uma funcionalidade de cadastro de usuários em lote (a partir de uma planilha excel, por exemplo). Existe uma forma de garantir que o cargo daquele usuário pertence àquela empresa?
No caso, eu criei uma rotina no meu controlador (poderia ser um service) que faz essa verificação, como abaixo:



String nomeEmpresa = empresa.nome
List cargos = retornaCargos(nomeEmpresa)

if(!cargos.contains(cargo.nome.toString())){
throw new RuntimeException("O cargo n\u00E3o percente a empresa $nomeEmpresa)
}

List retornaCargos(String nomeEmpresa) {

def cargos = Cargo.withCriteria {
empresa {
eq("nome", nomeEmpresa)
}
}
String[] listaDeCargos = cargos
return listaDeCargos
}


A minha dúvida era se teria como fazer essa verificação de uma forma melhor (como com o validator, por exemplo). Existem outras funcionalidades no projeto que dependem do cadastro de usuários e ter que repetir essa lógica em todas elas não me parece ser o melhor caminho.

Obrigado!
Tags: gorm, entidades, classes, groovy, validator, service, empresa, cargo


0
Oi Carlos,

o validator no caso só vai se aplicar em duas situações:

1) Você define algo como notNull, por exemplo, para um atributo

2) Você implementa o seu próprio validator, que deveria buscar os dados no banco de dados.

No geral, a melhor alternativa é você prestar atenção na ordem em que os registros são incluidos no banco de dados. No seu caso, sempre Empresa > Cargo > Usuario

Outra opção seria você implementar manualamente no seu serviço de importação esta validação antes do processamento.


0
Obrigado, Henrique.

Você poderia me mostrar um exemplo do custom validator onde ele busca dados no banco de dados?

Não encontro nenhum exemplo similar na web.

Abraços!
29/02/2012 18:25


0
Oi Carlos, da uma olhada neste link.



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